欢迎光临

木子屋

标题: C++栈和堆的几点区别

作者: dnawo

日期: 2010-11-20 11:57 AM

分类: Win编程

内容: 1).存储对象不同
栈主要存储程序中的临时变量，这些临时变量包括函数的参数变量、函数内的临时变量、指针变量(指的是指针本身)、数组变量等。
堆主要存储程序中动态申请的内存块，它们通常是new运算符创建的对象。
2).分配方式不同
栈的分配和释放是由编译器完成的，无需手工实现。
堆都是由new运算符动态申请分配，再手工调用delete函数来释放的，容易产生内存泄漏。
3).增长方向不同
栈的增长方向是向下的，即向着内存地址减小的方向，是一块连续的内存区域。
堆的增长方向是向上的，即向着内存地址增加的方向，是不连续的内存区域。
4).空间大小不同
栈的增长方向是向下的，所以一般大有限制(通常是2M)，因此，用户能从栈获得的空间较小，当申请的空间超过栈的剩余空间时，将提示溢出。
堆是用链表来存储空闲内存地址的，且链表的遍历方向是由低地址向高地址，因此，堆获得的空间较灵活，也较大。
5).是否产生碎片
栈不会产生碎片。
堆进行频繁的new/delete，势必会造成内存空间的不连续，从而造成大量的碎片，使程序效率降低(虽然程序在退出后操作系统会对内存进行回收管理)。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.771 ms

返回

标题: C++栈和堆的几点区别

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.771 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.803 ms

返回