代码区:存放函数体的二进制代码,由操作系统进行管理
全局区:存放全局变量和静态变量,以及常量(字符串常量以及其他常量)
栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
堆区:由程序员分配释放,若程序员没有释放,程序结束时由系统回收
意义:赋予不同的生命周期
程序编译后运行前,分为代码区和全局区
代码区特点是:共享性(对于频繁被执行的程序,在内存中只有一份代码即可),只读性(防止程序被篡改)
全局区在程序执行完由操作系统释放
程序运行之后有栈区和堆区
栈区:因为局部变量在函数运行完之后就会被释放掉,所以不要打印局部变量的地址值
如:
#include<iostream>
using namespace std;
int *func() {
int a = 10;
return &a;
}
int main() {
int *p = func();
cout << "*p" << *p << endl;
cout << "*p" << *p << endl;
system("pause");
}
运行结果
堆区:
可以利用new关键字,将数据开辟到堆区。最后由程序员释放
例:int *p=new int(10);
所以上边的例子,可以这样写
#include<iostream>
using namespace std;
int *func() {
int *a = new int(10);
return a;
}
int main() {
int *p = func();
cout << "*p" << *p << endl;
cout << "*p" << *p << endl;
system("pause");
}
输出结果:
堆区内存释放:
delete p;