在单线程应用程序中在堆栈上分配大量内存是否可以?

时间:2015-11-28 03:43:09

标签: c++ memory memory-management stack heap

我知道如果你有一个多线程应用程序,并且需要分配大量内存,那么你应该在堆上进行分配。堆栈空间在应用程序的线程之间划分,因此在创建新线程时,每个线程的堆栈大小会变小。因此,如果您尝试在堆栈上分配大量内存,则可能会溢出。但是,假设您有一个单线程应用程序,堆栈大小是否与堆的大小基本相同?

我在其他地方读到堆栈和堆在地址空间中没有明确定义的边界,而是它们相互成长。

P.S。分配对象的生命周期不是问题。在程序中首先创建对象,并在退出时进行清理。我不必担心它超出范围,因此从堆栈空间中清除。

1 个答案:

答案 0 :(得分:2)

不,堆栈大小与堆不同。堆栈对象以LIFO方式被推送/弹出,并用于诸如程序流程之类的事情。例如,在函数调用之前将参数“推入”堆栈,然后“弹出”到要访问的函数参数中。因此,如果你走得太深,递归会占用大量的堆栈空间。堆实际上是指针和分配内存。在现实世界中,堆栈就像时钟中的齿轮一样,堆就像你的桌子。你的时钟坐在你的桌子上,因为它占用了空间 - 但你使用的时间与桌面完全不同。

在Stack Overflow上查看这个问题:

Why is memory split up into stack and heap?