程序设计中的堆和栈
来源:互联网 发布:青岛java招聘 编辑:程序博客网 时间:2024/05/20 09:23
参考函数调用的基本原理,就可以大概知道两者的不同,下面总结以下。
栈(stack)是为执行线程留出的内存空间(每一个线程都有一个栈)
当线程创建的时候,操作系统(OS)为每一个系统级(system-level)的线程分配栈。栈附属于线程,因此当线程结束时栈被回收。当线程被创建的时候,设置栈的大小。
特点:
- 跟踪栈简单
- 从栈中释放块(free block)只不过是指针的偏移而已
- 在栈上的每个字节频繁的被复用也就意味着它可能映射到处理器缓存中
- 大小有限
堆(heap)是为动态分配预留的内存空间(每一个应用程序通常只有一个堆尽管为不同类型分配内存使用多个堆的情况也是有的))
通常情况下,操作系统通过调用语言的运行时(runtime)去为应用程序分配堆。堆通常通过运行时在应用程序启动时被分配,当应用程序(进程)退出时被回收。在应用程序启动的时候,设置堆的大小,但是可以在需要的时候扩展(分配器向操作系统申请更多的内存)。
特点:
- 跟踪堆困难
和栈不一样,从堆上分配和重新分配块没有固定模式。因此,你可以在任何时候分配和释放它。这样使得跟踪哪部分堆已经被分配和被释放变的异常复杂;有许多定制的堆分配策略用来为不同的使用模式下调整堆的性能 - 在堆上的变量必须要手动释放,不存在作用域的问题
- 大量的分配和释放可造成内存碎片
- 可以分配较大的内存
阅读全文
0 0
- 程序设计中的堆和栈
- 程序设计中的栈和堆的使用
- 【经典】程序设计中的堆与栈
- linux程序设计:堆和栈的区别
- 程序设计的基本原则:栈和堆
- java中的栈和堆
- Java中的堆和栈
- Java中的堆和栈
- java中的栈和堆
- c++中的堆和栈
- java中的堆和栈
- Java 中的堆和栈
- Java 中的堆和栈
- c++中的堆和栈
- c++中的堆和栈
- c++中的堆和栈
- c++中的堆和栈
- c++中的堆和栈
- dlnuacm-book完成计划(gitbook的使用)
- C++之编码问题(Unicode,ASCII,本地默认)
- Codeforces 230C Shifts【思维】
- 《Deep Self-Taught Learning for Weakly Supervised Object Localization》
- Python数据挖掘入门与实践(二)——用scikit-learn估计器分类
- 程序设计中的堆和栈
- Android移动开发-使用摄像头和麦克风录制视频的实现
- Zookeeper的功能以及工作原理
- apache服务器开启Gzip压缩服务
- Scratch2.0编程--第十一节 运算符
- Java基础 -- 线程
- 2017/9/30 学习笔记
- python基础(一)--join和os.path.join函数的用法以及字符串格式化
- 51nod1013 3的幂的和 (矩阵快速幂 或 逆元+快速幂)