不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
C++栈和堆的几点区别
编辑:dnawo 日期:2010-11-20
1).存储对象不同
栈主要存储程序中的临时变量,这些临时变量包括函数的参数变量、函数内的临时变量、指针变量(指的是指针本身)、数组变量等。
堆主要存储程序中动态申请的内存块,它们通常是new运算符创建的对象。
2).分配方式不同
栈的分配和释放是由编译器完成的,无需手工实现。
堆都是由new运算符动态申请分配,再手工调用delete函数来释放的,容易产生内存泄漏。
3).增长方向不同
栈的增长方向是向下的,即向着内存地址减小的方向,是一块连续的内存区域。
堆的增长方向是向上的,即向着内存地址增加的方向,是不连续的内存区域。
4).空间大小不同
栈的增长方向是向下的,所以一般大有限制(通常是2M),因此,用户能从栈获得的空间较小,当申请的空间超过栈的剩余空间时,将提示溢出。
堆是用链表来存储空闲内存地址的,且链表的遍历方向是由低地址向高地址,因此,堆获得的空间较灵活,也较大。
5).是否产生碎片
栈不会产生碎片。
堆进行频繁的new/delete,势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低(虽然程序在退出后操作系统会对内存进行回收管理)。
栈主要存储程序中的临时变量,这些临时变量包括函数的参数变量、函数内的临时变量、指针变量(指的是指针本身)、数组变量等。
堆主要存储程序中动态申请的内存块,它们通常是new运算符创建的对象。
2).分配方式不同
栈的分配和释放是由编译器完成的,无需手工实现。
堆都是由new运算符动态申请分配,再手工调用delete函数来释放的,容易产生内存泄漏。
3).增长方向不同
栈的增长方向是向下的,即向着内存地址减小的方向,是一块连续的内存区域。
堆的增长方向是向上的,即向着内存地址增加的方向,是不连续的内存区域。
4).空间大小不同
栈的增长方向是向下的,所以一般大有限制(通常是2M),因此,用户能从栈获得的空间较小,当申请的空间超过栈的剩余空间时,将提示溢出。
堆是用链表来存储空闲内存地址的,且链表的遍历方向是由低地址向高地址,因此,堆获得的空间较灵活,也较大。
5).是否产生碎片
栈不会产生碎片。
堆进行频繁的new/delete,势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低(虽然程序在退出后操作系统会对内存进行回收管理)。
评论: 0 | 引用: 0 | 查看次数: 4192
发表评论
请登录后再发表评论!