动态内存分配在哪里?

Vai*_*hav 4 c c++ dynamic-memory-allocation

在接受采访时我问了这个问题,答案是"计算机记忆".但到底在哪里......?它是随机存取存储器还是硬盘?

jwi*_*mar 7

他们可能正在寻找"堆".这是一个与"堆栈"分开的内存区域,它是存储所有局部变量,参数,返回值等的地方.是的,它全部在RAM中,而不是在硬盘上.

  • 但如果操作系统需要进行[分页](http://en.wikipedia.org/wiki/Paging),我可以去硬盘 (4认同)

Mar*_*ork 5

动态分配的内存是从通常称为“堆”的内存中分配的。

在 C++ 中,我们确实有两个“堆”(认为它们在技术上可能(或可能不是)相同的区域)。malloc()(和系列)分配的内存来自“堆”,而 new(和系列)分配的内存来自“空闲存储”。

请注意,“堆”和“自由存储”都是计算机科学“堆”的特定实例的绰号。

语言定义没有定义“堆”或“自由存储”的含义,留给实现来定义。此外,操作系统也会在内存页面发生的情况中发挥作用,但这超出了大多数应用程序的范围。

在计算机科学中,术语“堆栈”被用作一种简单化的教学工具。它定义了一个用于跟踪函数调用的内存区域,与“堆”不同。在现代操作系统中,这个定义过于简单。因此,运行时“堆栈”现在通常作为“堆”的一部分实现(这具有额外的优点,您不需要尝试跟踪运行时堆/堆栈是否冲突。此外,它还用作安全预防措施因为粉碎堆栈并获得确定性结果变得更加困难)。