C++栈和堆的几点区别

1).存储对象不同
栈主要存储程序中的临时变量,这些临时变量包括函数的参数变量、函数内的临时变量、指针变量(指的是指针本身)、数组变量等。
堆主要存储程序中动态申请的内存块,它们通常是new运算符创建的对象。

2).分配方式不同
栈的分配和释放是由编译器完成的,无需手工实现。
堆都是由new运算符动态申请分配,再手工调用delete函数来释放的,容易产生内存泄漏。

3).增长方向不同
栈的增长方向是向下的,即向着内存地址减小的方向,是一块连续的内存区域。
堆的增长方向是向上的,即向着内存地址增加的方向,是不连续的内存区域。

4).空间大小不同
栈的增长方向是向下的,所以一般大有限制(通常是2M),因此,用户能从栈获得的空间较小,当申请的空间超过栈的剩余空间时,将提示溢出。
堆是用链表来存储空闲内存地址的,且链表的遍历方向是由低地址向高地址,因此,堆获得的空间较灵活,也较大。

5).是否产生碎片
栈不会产生碎片。
堆进行频繁的new/delete,势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低(虽然程序在退出后操作系统会对内存进行回收管理)。

上一篇: 英文阅读助手
下一篇: C++参数默认值示例
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 4192
发表评论
登录后再发表评论!