C:C程序的内存布局和Endianess

C:C程序的内存布局和Endianess,c,C,我有一个关于C程序的结尾和内存布局的问题。我尝试搜索了几个站点,但没有得到满意的答案。“在标准PC x86计算机体系结构上,堆栈部分向下扩展到较低的内存区域;在其他一些体系结构上,堆栈部分向下扩展到相反的方向” 在Big-Endian架构中堆栈是否反向增长。我猜高内存和低内存是逻辑地址,而不是物理地址 它们是一个很好的参考资料。堆栈的增长方式与机器是大端还是小端无关。所有四种组合都是可能的,但绝大多数大端和小端机器都有一个从高地址到低地址的堆栈 堆栈增长的方向只是一个约定,尽管在某种程度上可能会

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

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


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

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


堆栈增长的方向只是一个约定,尽管在某种程度上可能会被烘焙到硬件中。新的架构倾向于使堆栈向下增长,因为这是最常见的惯例,因此一些程序不能正确处理其他可能性。它最初很流行,因为它避免了必须决定分配给堆栈多少空间(这是在内存少于32K的机器上)


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

正如前面所回答的,endianess和内存布局之间没有关系。 这里有关于程序内存布局的好信息。

你可以在维基上找到所有关于endianess的信息。

堆栈的增长方向与体系结构的持久性无关。“一些CPU允许您关闭虚拟内存”从技术上讲,它们允许操作系统打开/关闭虚拟内存,而没有任何非老式操作系统(据我所知)允许用户区程序关闭它。@kevin“you”是指编写操作系统的人。从这个问题上看,我猜OP不会很快编写操作系统。@kevin I dunno,这正是我期望从一个相当没有经验的人那里得到的问题,他试图理解CPU参考手册。除了堆栈向任何一个方向增长,应注意,“堆栈帧”可以向任意方向增长。也就是说,“帧头”可以位于(或接近)表示帧中的自动变量的存储器的低地址或高地址侧。通常帧头位于低地址端,但通常在其“下方”有一些存储(如寄存器保存区域)。这一切都会让人难以置信地参与进来,因为系统设计师将以3个周期的价格出售他们的第一个born,并保存在呼叫返回路径中。感谢分享。我想这就是我没有得到“令人满意的答案”的原因。现在清楚了