2

我有一个关于 C 程序的 Endianess 和内存布局的问题。我尝试搜索几个站点但无法得到满意的答案。“在标准 PC x86 计算机架构上,堆栈部分向下增长到较低的内存区域;在其他一些架构上,它向相反的方向增长”。

堆栈是否在 Big Endian 架构中反向增长。我猜高内存和低内存是逻辑地址,它们不是物理地址。

是他们的一个很好的参考资料。

4

2 回答 2

8

堆栈增长的方式与机器是大端还是小端无关。所有四种组合都是可能的,但是绝大多数大端和小端机器都有一个从高地址到低地址增长的堆栈。

堆栈增长的方向只是一种约定,尽管在某种程度上可能会融入硬件中。新架构倾向于使堆栈向下增长,因为这是最常见的约定,因此某些程序无法正确处理另一种可能性。它最初很受欢迎,因为它避免了必须决定分配多少空间给堆栈(这是在 RAM 小于 32K 的机器上)。

逻辑与物理寻址是另一个不相关的属性。假设“逻辑”是指“虚拟”,堆栈会增长——无论它以何种方式增长——如果虚拟内存被占用,则在虚拟地址空间中增长,如果没有占用,则在物理地址空间中增长。有些 CPU 允许您关闭虚拟内存(例如 x86),有些则不允许(例如 Alpha)。

于 2013-06-04T21:09:27.727 回答
0

正如已经回答的那样,字节序和内存布局之间没有关系。这里有关于程序内存布局的好信息。 http://www.inf.udec.cl/~leo/teoX.pdf

您可以在 wiki 中找到有关字节顺序的所有信息。 https://www.princeton.edu/~achaney/tmve/wiki100k/docs/Endianness.html

于 2013-06-05T00:29:25.283 回答