接下来就让小编大概介绍几点堆和栈的几点区别
- 管理方式
对于堆来说,释放工作由程序员进行管理,容易产生内存泄漏
对于栈说,是由编译器管理,无需我们手动管理 - 申请大小
堆的内存空间是由系统的链表来存储的空闲的内存地址的,是不连续的内存空间,堆的大小是由计算机系统中有限的虚拟内存决定的,获得的空间比较灵活
栈的内存空间是一块连续的内存空间,申请的大小也有一定的大小 - 碎片问题
对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低
对于栈来讲,就不会产生这个问题,因为栈是先进后出的队列,他们一一对应着,不会造成一块内存的间隔 - 分配方式
堆都是动态分配的,没有静态分配的堆。
栈有两种分配方式:静态分配和动态分配,静态分配是编译器完成的,比如局部变量的分配。动态分配是由alloc函数进行分配的,与堆的区别就是,它动态分配得内存由编译器管理 - 分配效率
堆的分配是由C/C++函数库来提供的,其内部实现异常复杂
栈是由机器系统提供的数据结构,计算机在底层对栈提供了支持:分配专门的寄存器存放栈的地址,压栈和出栈都有专门的指令,效率还是比较高的
以上就是小编查阅书海整理的几点,望对大家有所帮助啊!
本文概要介绍了堆和栈的主要区别,包括管理方式、申请大小、碎片问题及分配效率。对于堆,由程序员负责释放,易导致内存泄漏;而栈由编译器管理,无需手动操作。堆内存空间不连续且大小受限于虚拟内存,容易产生碎片问题,而栈内存空间连续,申请大小固定,避免了碎片问题。
1650

被折叠的 条评论
为什么被折叠?



