我想在 gcc 中定义一个不依赖于平台的大尺寸指针(64 位或 128 位)。 我认为 MSDN 中有类似 __ptr128 或 __ptr64 的内容。
sizeof(__ptr128) is 16 bytes.
sizeof(__ptr64 ) is 8 bytes.
这可能吗?
当您在需要 8 字节指针参数的 64 位操作系统中使用内核函数并且您有一个使用 32 位地址的 32 位应用程序并且您想使用此内核函数时,它会很有用。
最佳答案
你的问题毫无意义。根据定义,指针是指向某物的内存地址——大小必须取决于平台。您将如何在支持 64 位寻址的硬件平台上取消引用 128 位指针?!
您可以创建 64 位或 128 位值,但指针与底层硬件的内存寻址方案直接相关。
编辑
通过您的附加声明,我想我明白您要做什么了。不幸的是,我怀疑这是可能的。如果您要使用的内核函数采用 64 位指针参数,则它很可能是 64 位函数(除非您正在为某些不寻常的硬件开发)。
尽管技术上可以将 64 位指令混合到 32 位可执行文件中,但实际上没有编译器允许您这样做。 64 位 API 调用将使用 64 位代码、64 位寄存器和 64 位堆栈 - 编译器和操作系统管理从 32 位环境到 64 位环境的任意切换将非常尴尬环境。
您应该寻找适用于 32 位环境的等效 API。也许您可以发布您要使用的内核函数原型(prototype)(名称+参数),有人可以帮助您找到更好的解决方案。
只是为了避免混淆,MSDN 中的__ptr64
是不平台独立的:
On a 32-bit system, a pointer declared with __ptr64 is truncated to a 32-bit pointer.
关于linux - gcc中的大尺寸指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262280/