C++内存分区模型

本文详细介绍了C++内存的四个主要区域:代码区、全局区(包括.bss区和.data区)、栈区和堆区。代码区存放只读的机器指令,全局区存储全局变量和静态变量,栈区用于函数参数和局部变量,堆区则由程序员通过new手动管理。强调了栈区中局部变量的生命周期和new运算符的使用,以及内存泄漏的问题。同时提到了.bss区和.data区在全局变量中的作用。
摘要由CSDN通过智能技术生成

C++内存 =          代码区          +          全局区         +          栈区         +          堆区

代码区:存放CPU执行的机器命令(运行前)

        1.共享的

        2.只读的

全局区:存放全局变量和静态变量和常量区(普通常量、const开头的全局变量)(运行前)

        1.在程序结束之后由操作系统释放

ps:const修饰的局部变量离局部变量比较近。

栈区:函数的参数,局部变量等(运行时)

        1.编译器自动分配释放(编译器会给你保留一次,防止误操作)

ps:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

堆区: 通过new在堆区开辟内存(new返回的开辟的内存的指针)(运行时)

        1.由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

        

 Ps;如果new出来的空间在未使用的时候不释放会造成内存泄漏

new的理解:

int main(){
    int *p = new int(10);//p是局部变量,在堆;10是new出来的,在堆区
//  int *p = new int[10];创建的数组    数组释放加[]   比如 delete[] p;
    return 0;
}

 new的数据内存存活在堆区,p在栈区存在,保存着堆区10的地址。

补充:

        往往在内存模型图可以看到.bss区和.data区,这俩共同构成全局区。

                .bss区: main()函数执行前未能确定值的全局变量/静态变量

                .data区:main()函数执行前就能确定值得全局变量/静态变量

        PS:

                static修饰的函数告诉编译器他要操作静态变量,并不意味着他的保存位置!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值