c++ 内存四区

代码区:存放函数体的二进制代码,由操作系统进行管理
全局区:存放全局变量和静态变量,以及常量(字符串常量以及其他常量)
栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
堆区:由程序员分配释放,若程序员没有释放,程序结束时由系统回收

意义:赋予不同的生命周期

程序编译后运行前,分为代码区和全局区
代码区特点是:共享性(对于频繁被执行的程序,在内存中只有一份代码即可),只读性(防止程序被篡改)
全局区在程序执行完由操作系统释放
程序运行之后有栈区和堆区

栈区:因为局部变量在函数运行完之后就会被释放掉,所以不要打印局部变量的地址值
如:

#include
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");
}

运行结果


微信图片_20200313115631.png

堆区:
可以利用new关键字,将数据开辟到堆区。最后由程序员释放
例:int *p=new int(10);

所以上边的例子,可以这样写

#include
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");
}

输出结果:


微信图片_20200313115631.png

堆区内存释放:
delete p;

你可能感兴趣的:(c++ 内存四区)