gpt4 book ai didi

linux - gcc中的大尺寸指针

转载 作者:太空狗 更新时间:2023-10-29 11:34:02 25 4
gpt4 key购买 nike

我想在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com