堆与栈 区别

Posted Json2011315

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆与栈 区别相关的知识,希望对你有一定的参考价值。

1 ALU理解:

  1. 在CPU中存在核心模块ALU,主要是进行 数据计算 、逻辑计算
  2. 对于ALU来说进行简单运算是可以快速得出结果,而复杂的运算需要先记录再运算【寄存器,存储临时结果;过程ALU执行计算,将结果存放在寄存器各个块中,临时存储;利用寄存器可以实现计算机数据分布存储的过程】
  3. 实际过程上在程序中存在大量的,复杂运算或者处理的时候只利用寄存器是不够的,因此这个需要就使用了内存

2 内存的 堆与栈

内存:

  1. 栈,堆栈

2.1 栈的理解
对于栈,特点是先进后出;先进的在底部,后放的在顶部;如桶里放的东西,先放进去的内容最后才能拿出来

在程序中函数的调用是基本嵌套方式调用,因此函数的存储比较适合栈来存储先进后出;

2.2 堆的理解
关于堆、其本身一般是由开发人员进行分配释放,如果程序员不释放,程序结束的时候可能需要通过os回收,(不过这里不同编程语言的设置上会存在不同的情况,有的语言会自动回收,有的语言不会如果不断创建可能会导致内存泄漏)

3 堆与栈的 区别

  1. 内存分配:
    栈:内存分配主要由编译器负责分配和释放,栈上存储的是局部变量、函数返回地址等;
    堆:堆的内存操作一般主要是程序员(编程语言)实现、系统提供堆内存接口,编程语言提供相应的方法(需要主要垃圾回收不然会存在内存泄漏)

    区别点:
    栈的内存管理简单,分配堆块
    栈点内存不需要回收,堆需要回收;无论主动回收还是被动的垃圾回收,都需要额外的CPU
    栈的内存有更好的局部性,堆上的内存访问不一定很好,两块数据可能在不同页上,会比消耗时间
    
  2. 效率区别:栈的效率大于堆的效率(栈是进程初始化就分配好、堆是动态分配)

  3. 空间管理
    栈:由编译器自动管理,弹栈和压栈,不会产生内存碎片
    堆:手动申请和释放,会产生大量的内存碎片

  4. 大小:
    栈内存:大小限制一般为1-2 MB
    堆内存:不同程序没有限制

以上是关于堆与栈 区别的主要内容,如果未能解决你的问题,请参考以下文章

让你彻底明白JAVA中堆与栈的区别

java中堆与栈的区别

堆与栈(未完)

STM32的堆与栈与编译信息查看

堆与栈的区别

堆与栈 区别