我知道如果你有一个多线程应用程序,并且你需要分配大量内存,那么你应该在堆上分配。堆栈空间在应用程序的线程之间划分,因此当您创建新线程时,每个线程的堆栈大小会变小。因此,如果您试图在堆栈上分配大量内存,它可能会溢出。但是,假设您有一个单线程应用程序,堆栈大小是否与堆大小基本相同?
我在别处读到,堆栈和堆在地址空间中没有明确定义的边界,而是相互生长。
附言被分配对象的生命周期不是问题。对象首先在程序中创建,并在退出时清理。我不必担心它会超出范围,从而从堆栈空间中清除。
最佳答案
不,堆栈大小与堆大小不同。堆栈对象以后进先出的方式被压入/弹出,并用于诸如程序流之类的事情。例如,参数在函数调用之前被“压入”堆栈,然后“弹出”到要访问的函数参数中。因此,如果你走得太深,递归会使用大量堆栈空间。堆实际上是用于指针和分配的内存。在现实世界中,栈就像你钟表的齿轮,而堆就像你的办公 table 。你的时钟放在你的 table 上,因为它占用空间 - 但你用它来做一些与你的 table 完全不同的事情。
在 Stack Overflow 上查看这个问题:
关于c++ - 在单线程应用程序中在堆栈上分配大量内存是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33967415/