c - 在 32 位模式下使用 64 位 uint 作为指针值?

标签 c pointers 32bit-64bit binary-compatibility

我正在实现一种基于 C 的编程语言,我想实现一种编译模式,该模式与它是在 32 位还是 64 位模式下运行无关。我所有的数据类型都有明确的宽度,所以二进制兼容性没有问题,唯一有问题的方面是指针。

那么,即使在 32 位模式下,我也需要明确的 64 位指针实现怎么办? IIRC 几乎所有内存 Controller 都至少是 64 位的,因此读取和写入仍将是一个周期,但整数运算呢?

除了增加内存占用之外,这种方法是否有任何潜在的缺点?还有其他潜在的注意事项吗?

编辑:

让我澄清一下情景背景——最初的问题有点离题。我需要“二进制不可知论模式” 使解释器字节码能够动态桥接不同的 native 二进制文件。自然地,在 32 位二进制文​​件中使用 64 位二进制文​​件的指针几乎没有意义,但指针的宽度会影响其他数据位置的偏移量,这将是主要交换的内容。所以简而言之,想法如下 - 为了使数据结构二进制兼容 32 位和 64 位二进制文​​件,浪费了一些空间。

最佳答案

您可以使用 uintptr_t类型。

这是一个 unsigned int保证与指针大小相同。

它的定义在 C++11 和 C99 中是标准的(使用 <stdint.h> 头文件)。

如果希望指针始终为 64 位,可以使用 uint64_t .但是,这在具有 128 位指针的系统上是不安全的。

关于c - 在 32 位模式下使用 64 位 uint 作为指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20118339/

相关文章:

c# - 为什么 'stackalloc' 关键字不适用于属性?

visual-studio-2010 - 在 VS2010 中具有多个构建配置的一个项目?

c++ - opengl画半圆

c - 在没有宿主程序帮助的情况下,如何在同一个进程中协调不同的 DLL?

c++ - 更新对象的属性时遇到问题?

c++ - 如何从 Qt 中的布局中删除小部件

iOS 8 setValuesForKeysWithDictionary 在 iPhone 5/iPhone 4s 上失败

java - 使用 32 位 JRE 打开 64 位 Windows 虚拟键盘

c - C中if-else if的顺序

c++ - 使用 Socket 发送 POST 请求,但会占用大量内存