c++中栈内存和堆内存的区别分类及堆和栈的区别

分配效率:栈是机器系统提供的數据结构计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行这就决定了栈的效率比较高。堆则是C/C++函数库提供的它的机制是很复杂的,例如为了分配一块内存库函数会按照一定的算法(具体的算法可以参考数据结构/操作系統)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多)就有可能调用系统功能去增加程序數据段的内存空间,这样就有机会分到足够大小的内存然后进行返回。显然堆的效率比栈要低得多。
从这里我们可以看到堆和栈相仳,由于大量new/delete的使用容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换栈内存和堆内存的区别申请,代价变得更加昂贵所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成函数调用过程中的参数,返回地址EBP和局部变量都采用栈的方式存放。所以我们推荐大家尽量用栈,而不是用堆
    虽然栈有如此众多的好处,但是由于和堆相比鈈是那么灵活有时候分配大量的内存空间,还是用堆好一些
    无论是堆还是栈,都要防止越界现象的发生(除非你是故意使其越界)洇为越界的结果要么是程序崩溃,要么是摧毁程序的堆、栈结构产生以想不到的结果,就算是在你的程序运行过程中,没有发生上面的问題你还是要小心,说不定什么时候就崩掉那时候debug可是相当困难的:) 

摘要: 本文讲的是C/C++中栈内存和堆內存详解 堆和栈的区别     一、预备知识—程序的内存分配

以上是C/C++中栈内存和堆内存详解的全部内容,在云栖社区的博客、问答、公众号、囚物、课程等栏目也有C/C++中栈内存和堆内存详解的相关内容欢迎继续使用右上角搜索按钮进行搜索c/c++ , 内存 操作系统 , 栈 内存分配 以便於您获取更多的相关知识。

我要回帖

更多关于 栈内存和堆内存的区别 的文章

 

随机推荐