[C++] C++内存管理

C++内存管理

内存分配方式

地址从低到高依次为:

  1. 代码区:存放程序运行的代码段
  2. 静态存储区:存放静态变量以及初始化后的全局变量
  3. bss段:存储未进行初始化的全局变量和静态变量
  4. 堆:使用malloc分配的内存
  5. 文件映射区:进程间共享文件使用的内存区
  6. 栈:存储局部变量,函数参数以及返回值等,执行完后会释放

堆和栈的区别

  1. 管理方式:栈由编译器管理,堆内存的申请和释放由程序员通过malloc和free来实现。
  2. 空间大小:堆可分配空间比栈要大。堆在系统中可分配几个G的内存,栈只有几M。
  3. 碎片问题:堆在不断地malloc和free中,内存逐渐被碎片化;栈后进先出,不会出现碎片。
  4. 增长方向:堆的增长方向是向着地址增大的方向进行,栈是向着地址减小的方向增长。
  5. 分配方式:堆只能动态分配;栈可以静态分配也可以动态分配。堆的分配由malloc实现,需要手动使用free释放;栈的动态分配由alloca()实现,由编译器自动释放,可用于局部变量的动态分配。
  6. 分配效率:栈的分配由编译器和操作系统底层实现,效率较高;堆的分配涉及上层程序,效率较低。

静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值