1.内存四区模型
C++程序在执行时,将内存大方向划分为4个区域
--代码区:存放函数体的二进制代码,由操作系统进行管理
(释:所有代码中的英文字母、中文注释、数字都会放入其中)
--全局区:存放全局变量和静态变量以及常量
--栈(zhàn)区:由编译器自动分配释放,存放函数的参数值、局部变量等
--堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
内存四区意义:
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编辑 --分工合作
程序运行前:
(在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域)
一、代码区:
--存放CPU执行的机器指令(将所有写过的代码放入其中,会将你所写的代码转成二进制方便电脑识别)
--代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
--代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令(类似于游戏外挂)
二、全局区:
--全局变量和静态变量存放在此
--全局区还包含了常量区(常量区中存放const修饰的全局常量 和 字符串常量)
--该区域的数据在程序结束后由操作系统释放
只要写在函数体内的变量都叫做局部变量
int main()
{ //局部变量
int a=10;
int b=10;
}
只要写在函数体外的变量都叫做全局变量
//全局变量
int g=10
int main()
{ //局部变量
----
}
只要写在函数体外的常量都叫做全局常量
//全局常量
const int g=10
int main()
{ //局部变量
----
}
静态变量 :在普通变量前面加上static,属于静态变量(静态变量的地址和全局变量的地址很近)
static int a=10;
字符串常量:
string a="hello world"
const修饰的全局常量:
const int a=10;
int main()
{
----
}
const修饰的局部常量:
int main()
{
const int a=10;
}
思维导图梳理
程序运行后:
一、栈区:
由编译器(vs、dev之类)自动分配释放,存放函数的参数值,局部变量等。
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。
--程序
--执行
第二次为0,因为数据已经被清除
二、堆区:
由程序员分配释放,若程序员不释放,程序结束时由操作系统回收
在C++中主要利用new在堆区开辟内存
--程序
--执行
new运算符 数组释放用delete
总结:
思维导图梳理