gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:47 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

在 Stack Overflow 上查看这个问题:

Why is memory split up into stack and heap? '

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com