堆和栈的物理表示是什么?


9

我可以很容易地理解.bss和代码在处理器中如何进行物理表示,其中处理器具有用于存储程序计数器可以计数的指令的存储库,而bss(块起始符号)只是全局数据。但是,这里有用于局部变量的堆栈和用于动态内存的堆。这些东西如何物理地放在电路上?

Answers:


6

注意:由于我最熟悉x86,因此我主要指的是x86,并且已被广泛记录:

在x86(和大多数其他体系结构)上,堆栈就像其他所有内容一样都驻留在内存中。处理器通过指针来操纵堆栈,该指针通常存储在寄存器(堆栈指针)中。推入和弹出指令将更改堆栈指针的值,从而更改堆栈顶部的位置。

堆是一种软件抽象。顾名思义,这只是一个RAM块,分配器将其切成片并分发指针。从物理上讲,堆看起来与RAM的任何其他部分没有什么不同。

但是,分页和分段与堆切向相关。它们主要与多任务处理有关,在多任务处理中,不允许进程修改未明确拥有的RAM。


3
通常,分页更多地是关于内存管理(将物理内存映射到逻辑地址的单元),而不仅仅是访问限制,尽管后者倾向于用作内存管理单元的附加功能。
克里斯·斯特拉顿

4

从逻辑上讲,堆栈和堆通常只是内存;但在实现级别上,希望它们将主要从缓存中提供。在大多数系统中,它们是通过缓存算法动态到达的,但是有些系统支持在缓存或其他比平常更快的内存中进行显式定位,并且可能还支持那些提示,即特定数据应优先放置在此处,空间许可。

低级软件和编译器代码生成器的设计希望考虑到数据访问的组织方式,这有可能导致良好的缓存利用率,而不是恒定的缓存未命中。

一些处理器具有一个返回地址寄存器,该寄存器可用作一种深度较深的显式堆栈缓存(也可能具有多个深度较深的硬件堆栈,尽管没有想到示例)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.