C/C++中内存分为以下五个部分:
1.栈区: 存放函数的参数值,局部变量等。由编译器自动分配释放,大小固定,一般为2M或者1M
2.堆区:使用malloc或者new出来的对象存放的区域,可以由程序员自己申请和释放。
3.全局区(静态区):存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域。
4.常量区:常量字符串等
5.代码区:存放函数体的二进制代码
其中栈和堆的区别:
1.申请方式:
堆由程序员自己申请释放;
栈由编译器自动分配。
2.申请大小:
堆向高地址扩展,是不连续的内存区域,大小受限于计算机系统中有效的虚拟内存。空间比较灵活也比较大。
栈的容量和栈顶地址由系统预先规定好的,向低地址扩展,大小为2M或者1M,可用空间较小。
3.申请效率
栈速度较快。
堆分配一般较慢,且容易产生碎片。