【发布时间】:2015-12-07 12:15:15
【问题描述】:
我的问题非常基本,正如标题所说,我想知道为什么堆内存会出现。我知道堆内存支持动态内存分配,但是当两种类型的内存(静态和堆)都存在于 RAM 上时,为什么不能通过/在堆栈内存中完成相同的操作。为什么需要在进程地址空间中拥有单独的内存段。在发布这个问题时,我遇到了几篇与堆内存主题相关的帖子,但到目前为止,我检查并没有回答我的问题,而是更多关于堆内存的定义和行为. 为了更清楚地说明我的问题,为什么不能有一个大的堆栈内存也可以处理动态内存分配。我们知道动态内存是动态创建的,可以在需要时释放。也可以是动态内存分配的内存溢出或泄漏问题,但如果有一个大的堆栈内存作为堆或堆栈,如果内存没有被释放,则无法完成'那么即使在程序退出的情况下,它也肯定会导致浪费.话虽如此,当两个内存都驻留在 RAM 上时,为什么需要不同的内存结构来处理内存。
【问题讨论】:
-
你在问为什么动态内存分配是使用堆结构来完成的?或者您是在问为什么会有动态分配?
-
我想他指的是第二个问题,为什么要动态分配
-
不,我认为他指的是第一个。堆栈空间的大小不是固定的吗?如果你的结构是固定大小的,那么动态内存就不能很好地工作。如果你把堆栈做得很大以适应动态分配,就会浪费很多空间。
-
@AnastasiyaAsadullayeva 我使用的一个主要代码库不使用动态分配。它用于无法接受内存不足错误的关键应用程序。
-
@theartist33 关于堆栈的要点是它严格后进先出。动态内存不能那样工作。对两个结构的需求是非常基本的。它可以追溯到人们用汇编语言编写的时候,为了执行一个子例程,你需要 CPU 在某个地方转储其工作寄存器并在调用返回后再次获取它们。但是程序正在处理的主要数据需要存储在其他地方,这样它就不会在调用/返回堆栈转储过程中被破坏。