堆和栈的几点区别
来源:互联网 发布:linux 局域网 编辑:程序博客网 时间:2024/06/05 12:39
接下来就让小编大概介绍几点堆和栈的几点区别
- 管理方式
对于堆来说,释放工作由程序员进行管理,容易产生内存泄漏
对于栈说,是由编译器管理,无需我们手动管理 - 申请大小
堆的内存空间是由系统的链表来存储的空闲的内存地址的,是不连续的内存空间,堆的大小是由计算机系统中有限的虚拟内存决定的,获得的空间比较灵活
栈的内存空间是一块连续的内存空间,申请的大小也有一定的大小 - 碎片问题
对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低
对于栈来讲,就不会产生这个问题,因为栈是先进后出的队列,他们一一对应着,不会造成一块内存的间隔 - 分配方式
堆都是动态分配的,没有静态分配的堆。
栈有两种分配方式:静态分配和动态分配,静态分配是编译器完成的,比如局部变量的分配。动态分配是由alloc函数进行分配的,与堆的区别就是,它动态分配得内存由编译器管理 - 分配效率
堆的分配是由C/C++函数库来提供的,其内部实现异常复杂
栈是由机器系统提供的数据结构,计算机在底层对栈提供了支持:分配专门的寄存器存放栈的地址,压栈和出栈都有专门的指令,效率还是比较高的
以上就是小编查阅书海整理的几点,望对大家有所帮助啊!
1 0
- 堆和栈的几点区别
- 堆与栈的几点区别
- 交换机和路由器的几点区别
- 交换机和路由器的几点区别
- TRUNCATE和DELETE的几点区别
- TRUNCATE和DELETE的几点区别
- TRUNCATE和DELETE的几点区别
- TRUNCATE和DELETE的几点区别
- 交换机和路由器的几点区别
- TRUNCATE和DELETE的几点区别
- TRUNCATE和DELETE的几点区别
- 交换机和路由器的几点区别
- Dalvik和JVM的几点区别
- struts1和struts2的几点区别
- GIT和SVN的几点区别
- Dalvik和JVM的几点区别
- struts1和struts2的几点区别
- CPU和GPU的几点区别
- 搭建树莓派python开发环境
- WPF Popup 窗体弹出瞬间看到桌面背景
- 项目管理3-项目经理需要坚持的原则
- Python 面向对象
- 重拾编程之路--插入排序算法
- 堆和栈的几点区别
- eclipse启动tomcat成功,报404不能访问
- Throwable、Exception与Error
- ptyhon学习之flask安装
- APK打包忽略国际化问题
- 大数据(一) - hadoop生态系统及版本演化
- 计算机基础知识
- 如何配置RadosGW支持多个placement target / data pools
- Jeff and Digits