C++-内存分区模型

时间:2022-07-15

1内存分区模型

品牌网站建设,C++程序在执行时,将内存大方向划分为***4个区域***


代码区:存放函数体的二进制代码,由操作系统进行管理

全局区:存放全局变量和静态变量以及常量

栈区:有编译器自动分配释放,存放函数的参数值、局部变量等

堆区:由程序员分配和释放,若程序员不释放,程序结束后,由操作系统回收


1.1 程序运行前

在程序编译后,生成exe可执行程序,为执行该程序前分为两个区域:

代码区:

 存放CPU执行的机器指令

 代码区是共享的,共享的目的是对于频繁执行的程序,只需要在内存中有一份代码即可

 代码区是只读的


全局区:

 全局变量和静态变量存放在此

 全局区还包含了常量区,字符串常量和其他常量也存放于此

 该区域的数据在程序结束后由操作系统释放


不在全局区的:

 局部变量,const修饰的局部变量(局部常量)


在全局区的:

 全局变量——定义在函数体外的变量

 静态变量——用关键字 static 修饰的变量

 字符串常量——使用双引号的字符串,如 “Hello”

 全局常量——使用const修饰的全局变量


##1.2 程序运行后

栈区

 由编译器自动分配释放,存放函数的参数值、局部变量等

 **注意事项:**不要反悔局部变量的地址,栈区开辟的数据由编译器自动释放


堆区

 由程序员分配释放,若程序员不释放,程序结束后由操作系统回收。

 C++中主要利用new在堆区开辟内存

image.png


##1.3 new 操作符

 C++中利用new操作符在堆区开辟数据
 堆区开辟的数据,由程序员手工开辟、手动释放、释放利用操作符delete
 语法: new 数据类型


Copyright © 2016 广州思洋文化传播有限公司,保留所有权利。 粤ICP备09033321号

与项目经理交流
扫描二维码
与项目经理交流
ciya68