什么是更高效的堆栈内存或堆?

Leo*_*nid 7 c++ memory compiler-construction

可能重复:
C++哪个更快:堆栈分配或堆分配

从内存分配角度来看更有效 - 堆栈内存还是堆内存?它取决于什么?

显然,堆栈上存在动态分配与分配的开销.使用堆涉及查找可以分配内存和维护结构的位置.在堆栈上它很简单,因为您已经知道放置元素的位置.我想了解支持允许动态分配的结构的最坏情况(毫秒)开销是多少?

Naw*_*waz 7

堆栈通常在速度方面更有效,并且易于实现!

我倾向于同意软件网站Joel的 Michael ,他说,

在可能的情况下使用堆栈更有效.

当您从堆中分配时,堆管理器必须经历有时相对复杂的过程,才能找到一块空闲的内存.有时它需要环顾四周才能找到合适尺寸的东西.

这通常不是一个可怕的开销,但与堆栈功能相比,它肯定是更复杂的工作.当您使用堆栈中的内存时,编译器能够立即从堆栈中声明一大块内存以供使用.从根本上说,这是一个更简单的程序.

但是,堆栈的大小是有限的,所以你不应该把它用于非常大的东西,如果你需要大于4k左右的东西,那么你应该总是从堆中获取它.

使用堆栈的另一个好处是,当当前功能退出时它会自动清理,您不必担心自己清理它.您必须更加小心堆分配,以确保它们被清理.使用自动删除堆分配的智能指针可以帮助解决这个问题.

当我看到代码从堆中分配2个整数之类的东西时,我有点讨厌它,因为程序员需要一个指向2个整数的指针,当他们看到指针时,他们只是自动假设他们需要使用堆.我倾向于在经验较少的编码器中看到这一点 - 这是你应该使用堆栈的类型,并且只有在堆栈上声明的2个整数数组.

引自Joel on Software网站上的一次非常好的讨论:

堆栈与堆:效率更高?


Lau*_*ves 5

在堆栈上分配/释放更“高效”,因为它通常只涉及递增/递减堆栈指针,而堆分配通常要复杂得多。也就是说,在堆栈上存放大量内容通常不是一个好主意,因为在大多数系统上,堆栈空间比堆空间要有限得多(特别是当涉及多个线程时,因为每个线程都有一个单独的堆栈)。