gcc中的大小指针

Moh*_*lam 2 linux gcc pointers 32bit-64bit gcc4

我想在gcc中定义一个大尺寸指针(64位或128位),这不依赖于平台.我认为在MSDN中有类似__ptr128或__ptr64的东西.

sizeof(__ptr128) is 16 bytes.
sizeof(__ptr64 ) is 8  bytes.
Run Code Online (Sandbox Code Playgroud)

可能吗?

当你在64位操作系统中使用内核函数时需要8字节指针参数,并且你有一个32位应用程序使用32位地址并且你想使用这个内核函数.

ade*_*hus 7

你的问题毫无意义.根据定义,指针是一个内存地址 - 大小必须取决于平台.如何在支持64位寻址的硬件平台上取消引用128位指针?!

您可以创建64位或128位,但指针与底层硬件的内存寻址方案直接相关.

编辑

随着你的附加声明,我想我看到你正在尝试做什么.不幸的是,我怀疑这是可能的.如果要使用的内核函数采用64位指针参数,则很可能是64位函数(除非您正在开发一些不寻常的硬件).

即使技术上可以将64位指令混合到32位可执行文件中,但实际上没有编译器可以让你这样做.64位API调用将使用64位代码,64位寄存器和64位堆栈 - 编译器和操作系统管理从32位环境到64位的任意切换将非常尴尬环境.

您应该查看为32位环境找到等效的API.也许您可以发布您想要使用的内核函数原型(名称+参数),有人可以帮助您找到更好的解决方案.

只是这样没有混淆,__ptr64在MSDN中不是平台独立的:

在32位系统上,使用__ptr64声明的指针被截断为32位指针.