现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

free是如何释放内存的

2019-11-20 11:47 工业·编程 ⁄ 共 471字 ⁄ 字号 暂无评论

之前写代码的时候一直有个疑问,malloc申请内存的时候指定了内存大小,但是free的时候却只指定要释放的内存地址,那么free是如何知道它要释放的内存空间大小呢?

源码之前,了无秘密,下面就从源码来扒一扒。

wps10

由上图可知,malloc和free分别调用了malloc_internal和free_internal来实现具体的操作。

wps11

在malloc_internal中,最需要注意的一行就是计算需要分配空间的大小,可以看到,计算该空间时还加了一个sizeof(allocation_header),该结构体内部有两个成员:allocation_index、allocation_size。

此处的allocation_size是解答上面疑问的关键,它记录了调用malloc时分配的空间大小,再来看free_internal。

wps12

在free中,先是调用get_header获取到了调用malloc时分配的allocation_header,然后将该header作为参数传入free_internal中,因此调用free时不必传入空间的大小,因为可以计算出来。

给我留言

留言无头像?