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

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

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

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

附言被分配对象的生命周期不是问题。对象首先在程序中创建,并在退出时清理。我不必担心它会超出范围,从而从堆栈空间中清除。

最佳答案

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

在 Stack Overflow 上查看这个问题:

Why is memory split up into stack and heap? '

关于c++ - 在单线程应用程序中在堆栈上分配大量内存是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33967415/

相关文章:

c++ - "Unrecognized file"当我尝试打开它时 C++

c++ - 将QMetaMethod作为参数传递给使用新QObject::connect语法的函数

c++ - 线程构建 block 生成嵌套任务

memory - 线程 'main'对 'attempt to multiply with overflow'感到 panic

django - 我可以在不使用 RAM 的情况下通过 HTML 表单将大图像上传到我的服务器吗?

c - 多次从函数返回数组并释放 C 中的内存

c - 如何检查指针是否在分配的内存中写入?

c - Strlen Valgrind 大小 1 的无效读取

c++ - 利用 BST 的优先级队列 - 有趣的输出

C++ 2D数组内存分配