关于堆和栈
2011-04-07 11:52
99 查看
网上找到的,有什么不对的大家指出来,重新学习
1.栈是存放函数返回地址、参数、局部变量的。
堆是程序可以自由操作的内存,使用时先申请,用完之后释放,如何使用完全由程序代码控制。
2.栈在汇编代码中表示成PUSH POP,用的是ESS段,SP寄存器
而堆不是,是在内存中读写,EDS段,
3.
C++包括两种被应用程序管理的内存区域:一种称为栈(stack),另一种称为堆(heap)。
stack是函数被调用时自动分配的一块内存区域,它主要用于保留函数内使用的变量及函数调用位置处下一条代码的地址。
stack是后进先出,一个可变的指针指向stack的顶部。
本质上,当一个函数被程序调用时,当前的执行地址被放入stack,如果有参数传递到函数内,这些参数也被压入stack,如果函数内有变量,它们也被压入stack,如果函数执行时调用另一个函数,重复上面的过程。
当从函数返回时,stack指针指向存放先前执行地址的位置,也就是说,stack空间内分配的元素已被删除。这就是为什么函数内的变量此时无效,因为它们已经被推出了stack,另外要注意的是,声明一个静态变量,它没有进入stack中。
另一种由应用程序管理的内存区域是堆(heap),heap是储存应用程序的内存分配需求,并且分离于程序代码和stack,heap中分配的对象的总的空间受限于计算机系统中有效的虚拟内存。
C程序通常使用malloc和free分配和回收heap内存,在C++中,使用new和delete.
4.函数里的变量一般是stack,用new和malloc分配的是heap
stack是有大小限制的,heap的大小与系统虚拟内存差不多
stack运算比heap快
stack由编译器来管理,heap由程序员new, malloc, delete, free
5.heap____自由存储区
stack____局部存储区
通常意义上的堆栈一般指的就是栈
1.栈是存放函数返回地址、参数、局部变量的。
堆是程序可以自由操作的内存,使用时先申请,用完之后释放,如何使用完全由程序代码控制。
2.栈在汇编代码中表示成PUSH POP,用的是ESS段,SP寄存器
而堆不是,是在内存中读写,EDS段,
3.
C++包括两种被应用程序管理的内存区域:一种称为栈(stack),另一种称为堆(heap)。
stack是函数被调用时自动分配的一块内存区域,它主要用于保留函数内使用的变量及函数调用位置处下一条代码的地址。
stack是后进先出,一个可变的指针指向stack的顶部。
本质上,当一个函数被程序调用时,当前的执行地址被放入stack,如果有参数传递到函数内,这些参数也被压入stack,如果函数内有变量,它们也被压入stack,如果函数执行时调用另一个函数,重复上面的过程。
当从函数返回时,stack指针指向存放先前执行地址的位置,也就是说,stack空间内分配的元素已被删除。这就是为什么函数内的变量此时无效,因为它们已经被推出了stack,另外要注意的是,声明一个静态变量,它没有进入stack中。
另一种由应用程序管理的内存区域是堆(heap),heap是储存应用程序的内存分配需求,并且分离于程序代码和stack,heap中分配的对象的总的空间受限于计算机系统中有效的虚拟内存。
C程序通常使用malloc和free分配和回收heap内存,在C++中,使用new和delete.
4.函数里的变量一般是stack,用new和malloc分配的是heap
stack是有大小限制的,heap的大小与系统虚拟内存差不多
stack运算比heap快
stack由编译器来管理,heap由程序员new, malloc, delete, free
5.heap____自由存储区
stack____局部存储区
通常意义上的堆栈一般指的就是栈
相关文章推荐
- 关于OOM 1
- 关于未来市场的探索
- 关于GridView中自定义分页、单选、多选的简单应用
- 关于杀软的杀毒引擎
- 关于捕捉session 过期并弹出对话框提示的问题
- 关于防机器人论坛及博客刷屏的一些思路
- 关于主机远程唤醒(WOL,Wake on Lan)的几种方法
- 关于此版块:写给我的unix-linux之路
- 关于数据窗口中定义检索参数及retrieve()使用
- 关于虚拟机上网---(一)几种网络连接方式介绍
- 关于安装linux系统屏幕刷新率问题的详细介绍
- 关于ui和业务层的彻底分离思考
- 关于子类继承父类的那些讨论(不断更新中......)
- 关于反射的初步介绍
- struts2关于A web application created a ThreadLocal with key of type 异常解决办法
- 关于Android intent的知识 隐式意图和显示意图
- 有关于Java中的Classpath的作用
- 关于Ubuntu 9.10 的apt-get update 一直无法更新源的点点滴滴
- 关于flash的多文件上传的http头
- 关于 -- IPhone 的音频队列服务