【发布时间】:2016-03-02 05:57:04
【问题描述】:
我了解,如果您有一个多线程应用程序,并且需要分配大量内存,那么您应该在堆上分配。堆栈空间在应用程序的线程之间分配,因此每个线程的堆栈大小随着您创建新线程而变小。因此,如果您尝试在堆栈上分配大量内存,它可能会溢出。但是,假设您有一个单线程应用程序,堆栈大小是否与堆大小基本相同?
我在别处读到堆栈和堆在地址空间中没有明确定义的边界,而是它们相互增长。
附:被分配对象的生命周期不是问题。对象首先在程序中创建,并在退出时被清理。我不必担心它会超出范围,从而从堆栈空间中清除。
【问题讨论】:
-
这一切都取决于您在哪个系统上运行。不同的系统做不同的事情。最好在您的问题中说明您要问的是哪个系统。
-
尝试在栈和堆上分配20mb,看看会发生什么。
-
@M.M 我实际上正在应对编码挑战。所以,我猜这个系统是未知的。
-
“因此,当您创建新线程时,每个线程的堆栈大小会变小” – 嗯,不……?!
标签: c++ memory memory-management heap-memory stack-memory