c++编程中的内存分配和运行模型小结

  • 程序运行前

  • 全局区

  1. 存放全局变量,静态变量,常量(字符串常量以及const修饰的全局变量)
  2. 这个区域的数据在程序结束后被操作系统释放
    #include<iostream>
    using namespace std;
    long long a=10;//全局变量
    const long long b=20;//const修饰的全局变量
    int main()
    {
    
       static long long d=30;//静态变量
       cout<<(long long)&a<<endl;
    cout<<(long long)&b<<endl;
    
    cout<<(long long)&d<<endl;
       return 0;
    }

    这时会发现这几个量的地址是相似的,说明他们都同一个区

  3. 以此类推,局部变量就是不在全局区里的,他们的地址是有差别的,这里就不再过多写代码

  • 代码区

  1. 存放cpu执行的指令
  2. 代码区是共享、只读属性(提高效率、防止修改)
  • 程序运行后

  • 栈区

  1. 由编译器自动分配释放,存放函数参数值,局部变量等
  2. 注意不要返回局部变量的地址,栈区开辟的地址执行完后由编译器自动释放,第一次编译器做了保留,可以执行,再次执行会出现乱码
  • 堆区

  1. 由程序员分配释放,可以选择释放空间或者不释放,程序结束由操作系统自动回收
  2. 主要用new在堆区分配内存,用delete释放空间
  3. new用法

    new+数据类型//

    int *p;p=new int();//分配

    delete p;//释放

    注意new和delete要配对使用

    int *p;p=new int[];

    delete[]p;//分配数组空间,也需要释放数组空间

 new的具体用法可以参照C++基础 — new的使用_c++ new-CSDN博客这位博客讲的非常详细;

然后内容参照来源黑马程序员,本文只是个人总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值