在C++中,内存分成5个区,分别是堆,栈,自由存储区,全局/静态存储区和常量存储区。
栈:函数内的局部变量的存储单元可以在栈上创建
堆:由new分配的内存块
自由存储区:由malloc等分配的内存块
全局/静态存储区:全局变量和静态变量被分配到同一块内存
常量存储区:存放常量
堆和栈的区别:
管理方式: 对于栈来讲,由编译器自动管理,无需手工控制;
对于堆来讲,释放工作由程序员控制,容易产生memory leak.
空间大小: 一般堆可以达到4G,栈空间大小是1M
碎片问题:频繁的new/delete势必造成内存空间的不连续,造成大量的碎片,而栈是先进后出的队列
生长方向:堆,生长方向向上就是内存地址增加;栈,生长方向向下,内存地址减小
分配方式: 堆都是动态分配的,栈有静态分配和动态分配。
静态分配由编译器完成,如局部变量的分配,动态分配由alloca函数分配。
分配效率: 堆的效率比栈的效率低的多。