堆与栈 区别
Posted Json2011315
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆与栈 区别相关的知识,希望对你有一定的参考价值。
1 ALU理解:
- 在CPU中存在核心模块ALU,主要是进行 数据计算 、逻辑计算
- 对于ALU来说进行简单运算是可以快速得出结果,而复杂的运算需要先记录再运算【寄存器,存储临时结果;过程ALU执行计算,将结果存放在寄存器各个块中,临时存储;利用寄存器可以实现计算机数据分布存储的过程】
- 实际过程上在程序中存在大量的,复杂运算或者处理的时候只利用寄存器是不够的,因此这个需要就使用了内存
2 内存的 堆与栈
内存:
- 栈,堆栈
- 堆
2.1 栈的理解
对于栈,特点是先进后出;先进的在底部,后放的在顶部;如桶里放的东西,先放进去的内容最后才能拿出来
在程序中函数的调用是基本嵌套方式调用,因此函数的存储比较适合栈来存储先进后出;
2.2 堆的理解
关于堆、其本身一般是由开发人员进行分配释放,如果程序员不释放,程序结束的时候可能需要通过os回收,(不过这里不同编程语言的设置上会存在不同的情况,有的语言会自动回收,有的语言不会如果不断创建可能会导致内存泄漏)
3 堆与栈的 区别
-
内存分配:
栈:内存分配主要由编译器负责分配和释放,栈上存储的是局部变量、函数返回地址等;
堆:堆的内存操作一般主要是程序员(编程语言)实现、系统提供堆内存接口,编程语言提供相应的方法(需要主要垃圾回收不然会存在内存泄漏)区别点: 栈的内存管理简单,分配堆块 栈点内存不需要回收,堆需要回收;无论主动回收还是被动的垃圾回收,都需要额外的CPU 栈的内存有更好的局部性,堆上的内存访问不一定很好,两块数据可能在不同页上,会比消耗时间
-
效率区别:栈的效率大于堆的效率(栈是进程初始化就分配好、堆是动态分配)
-
空间管理
栈:由编译器自动管理,弹栈和压栈,不会产生内存碎片
堆:手动申请和释放,会产生大量的内存碎片 -
大小:
栈内存:大小限制一般为1-2 MB
堆内存:不同程序没有限制
以上是关于堆与栈 区别的主要内容,如果未能解决你的问题,请参考以下文章