c++将内存分为4个区域:
1.代码区:存放二进制的代码,由操作系统进行管理
2.全局区:存放全局变量以及常量
3.栈区:由编译器自动分配释放,存放函数参数值,局部变量
4.堆区:由程序员分配和释放
1.程序运行前:
编译后,执行前,生成exe可执行程序,分为两个区域:
1.1.代码区:
代码区是共享的,对于频繁被执行的程序,只需在内存中有一份代码即可。
代码区是只读的,防止意外修改
1.2.全局区:
存放全局变量,静态变量,常量
1.全局变量:在函数外部创建的变量。
2.静态变量:在普通变量前加 static 。
static int a = 10;
3.常量:包含字符串常量,const 修饰的变量。
1.字符串常量: 例:“Hello world.”
2.const 修饰的变量:
(1)const 修饰的全局变量:在全局区。
(2)const 修饰的局部变量:注:不在全局区。
2.程序运行后:
2.1.栈区:
由编译器自动分配释放,存放函数参数值,局部变量
注:不要返回局部变量的地址,因为在函数执行结束后就会由编译器回收。
2.2.堆区:
由程序员分配和释放。
在堆区开辟内存:new 操作符
在堆区释放内存:delete 操作符
3.new与delete 操作符:
1.new 的作用和基本语法:
new 操作符是c++中用来在堆区进行动态内存开辟的。(c语言则为malloc,calloc,realloc函数)
语法:new +数据类型(初始化的值)
int *p = new int(10);
返回对应类型的指针,指向开辟空间的首地址。
也可以开辟数组:
int *arr = new int[10];
2.delete 作用和语法:
delete 操作符是c++中用来回收开辟空间的。
注:尽可能保证每次new后必delete,养成良好编程习惯。
语法:
释放变量时:delete+想要释放内存的指针
delete p;
释放数组时:还需在delete后加 [ ]
delete[] arr;