分配和管理方式不同:
堆是动态分配的,其空间的分配和释放都由程序员控制;
栈是由编译器自动管理的,其分配方式有两种:静态分配由编译器完成,比如局部变量
会由编译器释放;
产生碎片不同:
对堆来说,频繁使用new/delete或者malloc/free会造成内存空间的不连续,产生大量碎
对栈来说,不存在碎片问题,因为栈具有先进后出的特性;
生长方向不同:
堆是向着内存地址增加的方向增长的,从内存的低地址向高地址方向增长;
栈是向着内存地址减小的方向增长的,从内存的高地址向低地址方向增长;
申请大小限制不同:
栈顶和栈底是预设好的,大小固定;
堆是不连续的内存区域,其大小可以灵活调整
分配和管理方式不同:
堆是动态分配的,其空间的分配和释放都由程序员控制;
栈是由编译器自动管理的,其分配方式有两种:静态分配由编译器完成,比如局部变量
会由编译器释放;
产生碎片不同:
对堆来说,频繁使用new/delete或者malloc/free会造成内存空间的不连续,产生大量碎
对栈来说,不存在碎片问题,因为栈具有先进后出的特性;
生长方向不同:
堆是向着内存地址增加的方向增长的,从内存的低地址向高地址方向增长;
栈是向着内存地址减小的方向增长的,从内存的高地址向低地址方向增长;
申请大小限制不同:
栈顶和栈底是预设好的,大小固定;
堆是不连续的内存区域,其大小可以灵活调整