C++-c++中堆(heap)内存还是堆栈(stack)内存分配的更快?

C++-c++中堆(heap)内存还是堆栈(stack)内存分配的更快?

甜柠檬 发布于 2017-03-05 字数 0 浏览 1624 回复 4

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

归属感 2017-10-07 4 楼

栈内存更快,栈是和代码段一同被载入到CPU内存中的,用C写得程序在被编译成机器指令之后,同一个函数栈上的变量会被保存在寄存器中的,并且栈上的内存基本上都是在编译的时候就确定了得,由于CPU的运算原理明显依赖寄存器的,所以栈上的内存访问速度明显比堆上快,现在CPU的设计一、二级缓存的大小已经最后栈内存的使用,所以效率明显要高很多,而堆上的内存由于和函数栈不在同一个地址段,所以堆上的内存很有可能不在寄存器或者CUP缓存中,访问命中率就低,同时效率也就会低很多,因为要出发好多系统内核调用,内存需要从硬盘到内存到CUP缓存再到寄存器。

夜无邪 2017-09-15 3 楼

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

甜柠檬 2017-06-09 2 楼

若要详细了解堆栈的区别,可以参考:http://www.cppblog.com/oosky/archive/2006/01/21/2958.html