为什么要使用堆栈?为什么不只是堆? - C / C ++

时间:2013-06-19 22:41:44

标签: memory dynamic stack heap allocation

根据我对动态内存分配的了解,堆似乎只是一个丰富的内存池,您可以根据需要使用它。我的问题是,为什么不总是将堆用于变量和对象,而忘记堆栈?

2 个答案:

答案 0 :(得分:4)

从性能角度来看,堆栈上的分配是“免费的”。堆分配相对昂贵。

另外,从概念上讲,它可以让对象在超出范围后立即被丢弃。

答案 1 :(得分:1)

  • Stack可以保存空间
    • 当我们希望控制对象的生命周期时,我们主要使用堆,在堆内存上分配临时缓冲区,而不是在函数结束后使用(比方说) 浪费堆内存,可以重复使用。

  • 堆栈可以比堆强更快
    • 堆栈中的内存分配过程是不变的(编译器在链接期间插入的几条机器指令)和快速。堆上的内存分配较慢(函数调用glibc和搜索例程),特别是如果它是碎片的。

当我需要大量内存来执行单个计算时,我更喜欢堆栈,而项目涉及执行许多此类计算。我不会使用堆来分割内存 只要一个不超过几百个字节就可以使用堆栈,任何更多的东西都可能试图覆盖你的进程的其他段而使它崩溃。