【发布时间】:2013-12-05 18:25:37
【问题描述】:
我正在实现一种基于 C 的编程语言,并且我想实现一种编译模式,它与它是在 32 位还是 64 位模式下运行无关。我所有的数据类型都有明确的宽度,所以二进制兼容性没有问题,唯一有问题的方面是指针。
那么,即使在 32 位模式下,如果我要明确的 64 位指针实现怎么办? IIRC 几乎所有的内存控制器都是至少 64 位的,所以读取和写入仍然是一个周期,但是整数运算呢?
除了增加内存占用之外,这种方法是否有任何潜在的缺点?还有其他潜在的警告吗?
编辑:让我澄清一下场景背景 - 最初的问题有点偏离。我需要解释器字节码的“二进制不可知模式”才能动态桥接不同的本机二进制文件。自然,在 32 位二进制中使用来自 64 位二进制的指针几乎没有意义,但指针的宽度会影响其他数据位置的偏移量,这将主要被交换。所以简而言之,这个想法如下 - 为了使数据结构二进制兼容 32 位和 64 位二进制文件而浪费一点空间。
【问题讨论】:
-
你的目标不明确。你想要源码级还是二进制级的兼容性?你不能拥有后者,至少在英特尔架构上是这样。前者是可能的,但我看不出它会给你带来什么。
-
为什么二进制兼容是不可能的?
-
您无法在 32 位操作系统上运行任何语言的 64 位可执行文件。 CPU 根本不会进入 64 位模式。这是一个特权过渡,操作系统不会让它发生。您必须编写一个内核模式组件,以便在每次系统调用或上下文切换时在 32 位和 64 位模式之间来回切换。
-
是的,这是不言而喻的,我的目标是更具体的使用场景——除了编译为原生我的语言还支持编译为字节码以进行解释,这将是 32 位和 64 位二进制文件之间的桥梁只要我在程序布局中保持完全的二进制兼容性。
-
“32 位模式”和“64 位模式”的概念不一定适用于解释代码。这些模式是架构规范的属性。您可以(非常低效地)在 2 位 FPGA 上实现 AMD64 架构规范,它将运行 64 位 Windows(缓慢)。对于解释代码,您的架构规范就是您的解释器规范。你的解释器是如何实现的并不重要。它可以是 32 位可执行文件、64 位可执行文件或由生锈的铁路车厢制成的图灵机。重要的是它与外界的接口。
标签: c pointers 32bit-64bit binary-compatibility