我有一个关于C程序的字节顺序和内存布局的问题,我试着搜索了几个站点,但没有得到满意的答案。“在标准的PC x86计算机体系结构上,堆栈部分向下增长到较低的内存区;在一些其他体系结构上,它的增长方向与之相反”。
堆栈是否在Big Endian架构中反向增长。我猜High Memory和Low Memory是逻辑地址,而不是物理地址。
他们是一个很好的参考资料。
发布于 2013-06-05 05:09:28
堆栈的增长方式与机器是高字节优先还是低字节优先无关。所有四种组合都是可能的,但绝大多数大端和小端机器都有一个从高到低地址增长的堆栈。
堆栈的发展方向只是一个约定,尽管在某种程度上可能会被嵌入到硬件中。新的架构倾向于使堆栈向下增长,因为这是最常见的约定,因此一些程序没有正确处理另一种可能性。它最初很受欢迎,因为它避免了必须决定分配给堆栈的空间(这是在RAM小于32K的机器上)。
逻辑寻址与物理寻址是另一个不相关的属性。假设你所说的“逻辑”指的是“虚拟”,堆栈在虚拟地址空间中增长--无论它以何种方式增长--如果虚拟内存被占用,则在物理地址空间中增长。一些CPU允许您关闭虚拟内存(例如x86),而另一些CPU则不允许(例如Alpha)。
发布于 2013-06-05 08:29:25
正如前面所回答的,字节顺序和内存布局之间没有关系。这里有一个程序的内存布局的好信息。http://www.inf.udec.cl/~leo/teoX.pdf
你可以在wiki上找到所有关于字符顺序的信息。https://www.princeton.edu/~achaney/tmve/wiki100k/docs/Endianness.html
https://stackoverflow.com/questions/16927434
复制相似问题