malloc,free的一些点

前几天学习c++的内存管理,new和delete,看的视频大部分都是讲解到底层调用malloc和free。我当时看视频简单的以为malloc就是分配个多大空间的内存,free就是把指针指向的大小释放掉,释放的多少根据指针指向对象的类型判定。但是在写内存池时有一个严重的问题,我malloc(n)的时候多次把指针转换为char*,导致我释放的时候不知道怎么根据char来释放掉这个大小为n的内存块。因为free传递的参数只有一个void指针。

后来我尝试搜了一些资料,发现,malloc和free在分配内存的时候其实是有两块的,一块是咱们平常直接见到的内存部分,一块是用来管理该内存的部分。也就是说实际分配的内存为:用户申请的大小+管理头的大小。释放的时候,会根据你指向的部分,借助管理头的数据,释放掉当时申请的内存大小。

char* p = (char*) malloc(10);
free(p);

释放p的时候,不会是单纯的释放掉一个char大小的内存,而是释放掉10个char大小的内存。因为对于malloc和free来说,这10个就是绑定在一起的,一起申请,一起释放。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值