C:c程序的内存布局和Endianness

时间:2013-06-04 21:03:51

标签: c

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

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

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

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:0)

如前所述,endianess和内存布局之间没有关系。 这里有一个关于程序内存布局的好信息。 http://www.inf.udec.cl/~leo/teoX.pdf

你可以在wiki找到关于endianess的所有信息。 https://www.princeton.edu/~achaney/tmve/wiki100k/docs/Endianness.html