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