首页 > 编程语言 > 详细

C++内存分区模型

时间:2020-08-03 17:05:21      阅读:84      评论:0      收藏:0      [点我收藏+]

内存分区模型

分区名 存储内容
代码区 存放函数体的二进制代码,由操作系统进行管理
全局区 全局变量,静态变量,常量,在程序执行结束后由操作系统管理
栈区 由编译器自动分配,释放,存放函数的参数值,局部变量
堆区 由程序员分配释放,程序运行结束,由操作系统回收

在程序未执行前就生成的区域

1代码区

作用:存放cpu机器指令

特点:

1共享的,频繁执行的程序需要在内存中存在一份

2只读的,防止程序的指令被意外的修改

 

2全局区

作用:存放全局变量和静态变量(static修饰的局部变量),还包括了常量区,常量区分为字符串常量和其他常量(const修饰的全局变量)

 

3栈区

作用:存放函数的参数值和局部变量(普通局部变量和const修饰的局部变量)

注意事项:不要返回局部变量的地址,其内存由编译器自动释放,访问该地址的指向的内存没有意义,在释放内存后,第一次访使用地址访问内存,编译器保留数据,第二次及以后访问将不再保留

 

4堆区

作用:由程序员分配和释放,在程序执行完毕后,由操作系统管理

使用new和delete关键字分配和释放内存

#include<iostream>

using namespace std;

//使用new关键字为一个变量分配内存
int *func() {
    //new关键字返回的是一个地址
    //语法 new int(变量的值);
    int *p = new int(10);
    return p;
}

void test01() {
    int *p = func();
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    //使用delete关键字释放一个变量的内存
    delete p;
    cout << *p << endl;
    p = nullptr;
}

void test02() {
    //使用new关键字为数组分配内存
    //语法 new int[数组长度];
    int *arr = new int[10];

    for (int i = 0; i < 10; ++i) {
        arr[i] = i + 100;
    }
    for (int i = 0; i < 10; ++i) {
        cout << arr[i] << endl;
    }
    //使用delete关键字释放数组所占用的内存
    //语法delete[] 指向数组首址的指针;
    delete[] arr;
}

int main() {
//    test01();
    test02();
    system("pause");

    return 0;
}

 

分配方式:C++中使用new 关键字分配内存

 

4堆区

C++内存分区模型

原文:https://www.cnblogs.com/RGBTH/p/13427194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!