【发布时间】:2016-06-19 00:29:31
【问题描述】:
我试图了解 CPU 在跟踪程序堆栈/堆分配中的作用。
阅读一些材料,我遇到了这个:
传统上,堆栈区域与堆区域相邻,并以相反的方向增长;当堆栈指针遇到堆指针时,空闲内存已耗尽。
堆栈和堆指针是否存储在程序特定的寄存器中?
如果堆栈指针指向堆栈的顶部,并且(我假设)堆指针指向堆的末尾,这些指针如何在不覆盖内存的情况下相遇(溢出)?
这在现代系统中是如何工作的?
【问题讨论】:
-
这完全取决于实现。在传统的 Unix 系统中,堆会从静态内存的末尾向下增长,而堆栈将从地址空间的底部向上增长。但是 C 规范中没有任何内容。这需要这个,而现代多线程实现并不那么简单。
-
如果你想在你的系统上测试这个,试着做一些测试: 编写一个打印全局初始化变量地址的程序,一个全局未初始化变量,一些存储返回由
malloc和自动(堆栈)变量的地址。看看它们如何适应地址空间。
标签: c memory memory-management