c语言内存管理及动态内存申请

c编译程序占用的内存分为栈区 \ 堆区 \ 未初始化数据区 \ 初始化数据区 \ 代码区

  1. 未初始化数据区(BSS):存放未初始化的全局变量,属于静态内存分配,即程序一开始就将其清零
  2. 初始化数据区\静态数据区(DATA):存放已初始化的全局变量\静态变量\常量
  3. 代码区:存放程序的执行代码;
  4. 栈区(stack):存放函数的参数值 \ 局部变量的值,由编译器自动释放分配;
  5. 堆区(heap):用于动态的内存分配.用户使用malloc或new函数分配,用户通过free或delete函数释放.

malloc\free和new\delete区别:
相同点:
       都是在堆区申请内存,需要手动申请,手动释放;

不同点:
       1.malloc属于c语言提供的系统函数,有函数开销,需要手动计算申请的内存大小;
       2.new属于c++提供的关键词,没有函数开销,会自动计算申请的内存大小;
               例:int *a = new;  //自己计算
                int *a = malloc(sizeof(int));   //手动计算
       3.delete调用一次析构函数,delete[]多次调用析构函数,一般与new[]配合使用;
       4.new可以调用malloc实现,但malloc不能调用new实现
       5.malloc分配内存后,如果使用过程中发现内存不足,可以使用realloc函数重新进行内存分配,实现内存扩充.
        6.new没有这样直观的配套设施类扩充内存;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值