C语言malloc(size)分配的可用空间,以及 free(*) 成功的根据

本文探讨了C语言中malloc分配内存时的实际大小,包括内存块的组成、对齐约束,以及free如何确定释放内存的大小。通过malloc_usable_size函数,可以查询malloc分配的实际可用空间。分析了malloc(0)分配的空间和Alignment的影响,并通过实例验证了内存分配与释放的工作原理。
摘要由CSDN通过智能技术生成

接上一篇文章:「C语言内存分配函数void* malloc(size_t size)的实际分配情况」。

先回忆一下,上一篇文章里总结的 void* malloc(sizt_t size) 实际分配了多大的内存块:

  • 成功分配到的内存块的大小「chunk size」是 8 字节的整数倍。

  • 分配到的内存块空间里,包括两部分:(1)用户或代码可用的空间,(2)overhead信息。

  • 分配到的内存块的大小,除了受上述(1)(2)的约束,还受(3)Alignment「对齐」的约束,而Alignment「对齐」的要求是「 向 2 × sizeof(sizt_t) 」靠拢。

  • 具体到我的 64-bit操作系统、size_t (64-bit OS默认为long unsigned int)为8 字节,分配到的最小的内存块是32个字节。

  • 在我的机器上,非最小内存块的大小是 32 + 2 × sizeof(size_t) × n = 32 + 2 × 8 × n = 32 + 16 × n 个字节,其中 n 为 大于等于 0 的整数 。

  • overhead 信息占用 sizeof(size_t) 个字节,在我的机器上,是 8 个字节。

  • 通过 gdb 查看 malloc() 分配的多个内存块「chunk」的状态&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值