操作系统:Windows 7 32位
所以像c++一样,有一个堆和一个堆栈。但我最近开始进行一些汇编学习,但没有看到任何类似的东西,只有一个堆栈,但它看起来就像纯粹的内存。
那么堆和栈的实现是特定于 C++ 和其他语言的吗?或者您仍然在汇编中分配堆和堆栈吗?当启动一个可执行文件时,Windows 在为进程分配内存方面做了什么?
进程如何知道堆栈大小需要有多大?
怎么办
编辑:也许有人可以提供有关 CPU/OS 如何处理进程的堆和堆栈内存的链接
我的大部分知识都不是特定于 Windows 的,所以请耐心等待:
堆和堆栈指的是内存中的不同区域(但我们仍然在每种情况下讨论主内存)。这并不是任何语言所特有的。堆位于内存低地址并向上增长;堆栈位于内存高地址并向下增长。这是为了防止它们重叠(这将是非常糟糕的)。
在 32 位架构上,EBP 和 ESP 寄存器跟踪当前堆栈帧。 EBP是基指针——它指向当前堆栈帧的高地址。 ESP是堆栈指针,它指向当前堆栈帧的低地址。
请记住,释放/分配的堆和堆栈内存的概念主要与应用程序级别相关。在机器级别,所有内存看起来都是一样的 - 由程序员(或编译器)来跟踪正在使用哪些内存段。
堆栈由以下组合管理:调用函数的指令以及对 EBP 和 ESP 的显式修改。任何低于 ESP 的都被视为已释放;因此,要释放内存,您只需添加到 ESP 即可。
堆通过内存分配方法进行管理;可以找到文档here。我不确定 Winows 的具体情况,但一般来说,会有一些内存管理器负责确保没有内存块分配给多个应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)