锟斤拷锟斤拷go泰拉瑞亚手机版锟斤拷锟斤拷go没什么可说的 安卓

锟斤拷训锟杰斤拷_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
锟斤拷训锟杰斤拷
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢【图文】泰锟斤拷锟教匡拷锟斤拷说锟斤拷_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
泰锟斤拷锟教匡拷锟斤拷说锟斤拷
上传于||暂无简介
大小:75.89MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢锟斤拷锟斤拷锟斤拷业锟斤拷约锟斤拷锟轿伙拷锟?C++锟节达拷锟斤拷浞绞斤拷锟斤拷-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
锟斤拷锟斤拷锟斤拷业锟斤拷约锟斤拷锟轿伙拷锟?C++锟节达拷锟斤拷浞绞斤拷锟斤拷
来源:互联网 更新时间: 17:51:18 责任编辑:李志喜字体:
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。
  堆,就是那些由&new&分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个&new&就要对应一个&delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。堆可以动态地扩展和收缩。
  自由存储区,就是那些由&malloc&等分配的内存块,他和堆是十分相似的,不过它是用&free&来结束自己的生命的。
  全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的&C&语言中,全局变量又分为初始化的和未初始化的(初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过&void*&来访问和操纵,程序结束后由系统自行释放),在&C++&里面没有这个区分了,他们共同占用同一块内存区。
  常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)
  明确区分堆与栈
  在 BBS&上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。
  首先,我们举一个例子:
void f() { int* p=new int[5]; }
  这条短短的一句话就包含了堆与栈,看到&new,我们首先就应该想到,我们分配了一块堆内存,那么指针&p&呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针&p。在程序会先确定在堆中分配内存的大小,然后调用&operator new&分配内存,然后返回这块内存的首地址,放入栈中,他在&VC6&下的汇编代码如下:
14h  0040102A
operator new ()  0040102F
dword ptr [ebp-8],eax  
eax,dword ptr [ebp-8]  
dword ptr [ebp-4],eax
  这里,我们为了简单并没有释放内存,那么该怎么去释放呢?是&delete p&么?噢,错了,应该是&delete []p,这是为了告诉编译器:我删除的是一个数组,VC6&就会根据相应的&Cookie&信息去进行释放内存的工作。
  好了,我们回到我们的主题:堆和栈究竟有什么区别?
  主要的区别由以下几点:
  1、管理方式不同;
  2、空间大小不同;
  3、能否产生碎片不同;
  4、生长方向不同;
  5、分配方式不同;
  6、分配效率不同;
  管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。
相关文章:
上一篇文章:下一篇文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号

我要回帖

更多关于 锟斤拷烫烫烫 的文章

 

随机推荐