C++学习之内存分配空间

C++学习之内存分配空间

一、C++中内存分区模型

c++程序在执行时,将内存大方向分为四块
1、代码块:存放函数体的二进制代码,由操作系统进行一个管理
2、全局块:存放全局变量,静态变量,以及常量
3、栈   区:由编译器自动进行分配与释放,存放函数的参数值,以及局部变量
4、堆  区:由程序员进行分配与释放,若程序员不释放,则程序结束时,由操作系统自动回收
内存分区的意义:不同的区域存储的数据,赋予不同的生命周期,更好的利用系统的资源。

1.1代码快(运行前)

在代码编译完成之后,生成对应的.exe可执行文件(如:hello World.exe),在未执行程序之前,分为两个区域
代码块:
     存放CPU执行的机器指令
     特点:1、代码区是共享的,对于需要频繁执行的程序,只需要在内存中只有一份即可。
          2、代码区是只读的,防止程序被恶意的修改了机器指令

1.2 全局区(运行前)

   存放全局变量,静态变量(static int a;),以及常量("hello world"、(全局的)const int b;)
   特点:该区中的数据当程序结束中,由操作系统进行释放

1.3栈 区(运行中)

 由编译器自动进行分配与释放,存放函数的参数值,以及局部变量
 不返回局部变量的地址,由编译器独自释放(如果函数返回的是局部变量的地址,第一次使用的时候,能够得到局部函数的数据,
 当再次使用时,将不会提到局部变量的数据(不是二次调用))

1.4堆 区(运行中)

   由程序员进行分配与释放,若程序员不释放,则程序结束时,由操作系统自动回收
   在c++中使用new在堆区开辟内存空间(int * P = new int (10);)
   手动开辟是使用的是:new  (int * P = new int (10);)
   手动释放时使用的是:delete (delete P;)
  int *array =  new int[10];//开辟了一个数组在堆中
  delete[] array;//释放数组,需要加一个“[]”括号
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值