堆和栈的几点区别

来源:互联网 发布:linux 局域网 编辑:程序博客网 时间:2024/06/05 12:39

接下来就让小编大概介绍几点堆和栈的几点区别

  1. 管理方式
    对于堆来说,释放工作由程序员进行管理,容易产生内存泄漏
    对于栈说,是由编译器管理,无需我们手动管理
  2. 申请大小
    堆的内存空间是由系统的链表来存储的空闲的内存地址的,是不连续的内存空间,堆的大小是由计算机系统中有限的虚拟内存决定的,获得的空间比较灵活
    栈的内存空间是一块连续的内存空间,申请的大小也有一定的大小
  3. 碎片问题
    对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低
    对于栈来讲,就不会产生这个问题,因为栈是先进后出的队列,他们一一对应着,不会造成一块内存的间隔
  4. 分配方式
    堆都是动态分配的,没有静态分配的堆。
    栈有两种分配方式:静态分配和动态分配,静态分配是编译器完成的,比如局部变量的分配。动态分配是由alloc函数进行分配的,与堆的区别就是,它动态分配得内存由编译器管理
  5. 分配效率
    堆的分配是由C/C++函数库来提供的,其内部实现异常复杂
    栈是由机器系统提供的数据结构,计算机在底层对栈提供了支持:分配专门的寄存器存放栈的地址,压栈和出栈都有专门的指令,效率还是比较高的

以上就是小编查阅书海整理的几点,望对大家有所帮助啊!

1 0