堆和栈学习总结

堆和栈学习总结

ID:42679033

大小:100.50 KB

页数:8页

时间:2019-09-20

堆和栈学习总结_第1页
堆和栈学习总结_第2页
堆和栈学习总结_第3页
堆和栈学习总结_第4页
堆和栈学习总结_第5页
资源描述:

《堆和栈学习总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、堆和栈在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out)堆和栈的区别堆和栈的比较从堆和栈的功能和作用來通俗的比较,堆主要用來存放対象的,栈主要是用來执行程序的•而这种不同又主要是由于堆和栈的特点决定的:在编程中,例如C/C++中,所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分

2、配内存空间的。实际上也不是什么分配,只是从栈顶向上用就行,就好像工厂中的传送带(conveyorbelt)—样,StackPointer会自动指引你到放东西的位置,你所要做的只是把东西放下来就行.退岀两数的时候,修改栈指针就对以把栈中的内容销毁.这样的模式速度最快,当然要用来运行程序了.需要注意的是,在分配的时候,比如为一个即将要调用的程序模块分配数据区时,应事先知道这个数据区的人小,也就说是虽然分配是在程序运行时进行的,但是分配的大小多少是确定的,不变的,而这个”大小多少“是在编译吋确定的,不是在运行时.堆是

3、应用程序在运行的时候请求操作系统分配给自己内存,由于从操作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低.但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。爭实上,面向对象的多态性,堆内存分配是必不可少的,因为多态变量所需的存储空问只有在运行时创建了对象之后才能确定.在C++屮,要求创建一个对彖时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存.当然,为达到这种灵

4、活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!这也正是导致效率低的原因,我想你现在该明白了吧。:)学过汇编么?内存中的东西分三类:代码(code)、数据(data)、栈(stack),其中stack是负责子程序的调用和返回的,stack实行后进先出的机制,调用子程序时先将当前地址的下一个地址临时保存到stack中,而子程序根据这个地址返冋。在子程序(函数)内部分配的局部变量也是在stack中分配,这样,函数返回时,分配的空间也自动收回。而heap则是系统从data区中特别挪用并且独立管理的一

5、个数据区,用于程序执行中数据的动态分配。从表相看:全局静态数据在data中,局部分配的静态数据在stack中,动态分配的数据在heap预备知识一程序的内存分配一个程序一般分为3段:text段,data段,bss段text段:就是放程序代码的,编译时确定,只读,data段:存放在编译阶段(而非运行吋)就能确定的数据,可读可写就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个区域bss段:定义而没有赋初值的全局变量和静态变量,放在这个区域一个由C/C++编译的程序占用的内存分为以

6、下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)——般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区一常量字符串就是放在这里的,程序结束后由系统

7、释放。5、程序代码区一存放函数体的二进制代码。二、例子程序这是一个前辈写的,非常详细//main.cppinta=0;全局初始化区char*pl;全局未初始化区main(){intb;栈chars[]=HabcM;栈char*p2;栈char*p3=”123456";123456在常量区,p3在栈上。staticintc=0;全局(静态)初始化区pl=(char*)malloc(10);p2=(char*)malloc(20);}分配得来得10和20字节的区域就在堆区。strcpy(pl,T23456”);

8、123456放在常量区,编译器可能会将它与p3所指向的T23456"优化成一个地方。堆和栈的理论知识1•申请方式stack:rti系统自动分配。例如,声明在函数屮一个局部变Mintb;系统自动在栈屮为b开辟空间heap:需要程序员自己申请,并指明大小,在C中malloc函数女Upl=(char*)malloc(10);在C++中用new运算符如p2=newchar[20];//(c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。