堆栈的分配效率问题

Posted mini-coconut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆栈的分配效率问题相关的知识,希望对你有一定的参考价值。

前面已经总结过堆和栈的区别,这里着重在分配效率方面区别二者。

栈的分配效率是要比堆高的,那么为什么呢?

分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆>内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会>分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。

 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。


以上是关于堆栈的分配效率问题的主要内容,如果未能解决你的问题,请参考以下文章

内存管理

c语言堆栈是啥意思?

为啥我们不能在堆栈上分配动态内存?

在递归函数中在堆上分配与在堆栈上分配

结构总是堆栈分配还是有时堆分配?

结构总是堆栈分配还是有时堆分配?