C++内存管理机制
在C++中内存分为5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区
-
堆(heap):分配方式类似于链表;一般由程序员分配和释放,若程序员不释放,OS可能回收。分配方法:malloc、new ;释放方法:free delete
-
栈(heap):编译器自动分配释放,存放函数参数值、局部变量的值。操作方式类似于:数据结构的栈。 进程的每个线程都有私有的栈
使用 new 和 delete时, 内存在堆中分配。堆内存空间必须通过 delete 完全释放,以防止内存泄漏。只要不delete,分配在堆上的对象可以一直存活下去。
栈是系统自动分配管理的,局部变量就是来自于栈区,只要超出了作用域的栈区数据就会被自动回收。
-
全局/静态存储区(static):全局变量和静态变量的存储位置,由系统分配和释放。初始化的存放于.data,未初始化的在.bss。 默认初始化为0
-
常量区(文字常量区):存放常量字符串,存放于.rodata, 程序结束后有系统释放。
-
程序代码区:存放函数体的二进制代码(.text)
堆栈 存放本地变量 即局部变量。在堆栈中,程序通过堆栈的基址和偏移量来访问本地变量