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

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

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

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

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

在Stack Overflow上查看这个问题:

Why is memory split up into stack and heap?

点赞