C++内存管理机制
C++中的内存管理
1. Linux中程序的内存地址分配
其中上面的地址为高位地址,下面的地址为低位地址。下面分别介绍各个内存区域的作用:
l 代码段:存放函数体的二进制代码;
l Bss段:存放未初始化的全局或静态数据;
l Data段:存放已初始化的全局或静态变量;
l 堆区:存放动态申请的内存,一般由new和malloc分配;
l 栈区:存放函数运行时的局部变量,函数参数,返回数据,返回地址等。
2. 堆和栈
l 栈:在函数调用时,第一个入栈的为该函数执行完毕后的下一条指令的地址,然后是参数,按从右至左入栈,最后是局部变量,这里静态变量不如栈;函数执行完毕后,局部变量先出栈,再是参数,最后是该函数执行完毕后的下一条指令地址。
l 堆:操作系统中存在一个记录堆中空闲内存的链表,每次动态申请内存时,都会去访问该链表,选择相匹配的内存,同时将多余的内存还回链表,可以知道这样必然会产生碎片,调用delete时,会去访问动态申请的这块内存首地址记录的本次动态分配的内存大小,从而正确的释放当前分配的内存空间。