C++内存模型
C++内存分为5个区域:
堆内存:由new分配的内存块,其释放编译器不去管,而是由我们程序自己控制,一个new对应一个delete。如果没有释放掉,在程序运行结束时操作系统也会自动回收。涉及的问题:缓冲区溢出,内存泄漏。
栈内存:在需要时分配,存放局部变量,函数参数,存放在这栈中的数据只在当前函数及下一层函数中有效,一旦函数返回了,这些数据也就自动释放掉了。
全局/静态存储区:全局和静态变量被分配到同一块内存中。
常量存储区:存放常量,不允许被修改。
代码区:存放代码(如函数),不允许修改,但可以执行。
C++内存模型为:
自由存储区:局部非静态变量的存储区域,就是栈。
动态区:用operator new, malloc分配的内存,就是堆。
静态区:全局变量,静态变量,字符串常量存放的位置。
代码虽占内存,但不属于C++内存模型的一部分。
在linux系统中,程序在内存中的分布如下所示:
从 低地址-->高地址 代码区--> 全局/静态存储区-->堆--> unused -->栈-->env
Last updated