下面这张图很详细的描述了C++中各种内存区域。
内存分布一般分为以下几个区域:
代码区
存放CPU执行的机器指令,代码区是可共享,并且是只读的。
数据区
静态变量(全局和局部)、已初始化的全局变量、常量数据(比如常量字符)。
BSS区
未初始化的全局变量和静态变量(会执行默认初始化)。
以上区域是代码未执行时就有的区域。
下面是代码执行时才有的区域。
栈区
由编译器自动分配释放,存放函数的参数值、返回值和局部变量(临时变量),在程序运行过程中实时分配和释放,栈区由操作系统自动管理,无须程序员手动管理。
堆区
堆是由malloc\new分配,使用free\delete函数来释放的内存,堆的申请释放工作由程序员控制,容易产生内存泄漏。
网友评论