1.13、传入一个指针,它如何确定具体要清理多少空间呢?
传入一个指针给 free()
函数时,free()
并不需要调用者告诉它要释放多少内存。它之所以能知道具体要释放多少空间,是因为在调用 malloc()
分配内存时,内存管理系统会在用户可用内存块的前面额外预留一段“元数据”区域(通常是16字节左右),用来存储该内存块的大小及其他管理信息。
- 1. 当你调用
malloc(size)
时,实际分配的内存大小是size + sizeof(元数据)
,元数据一般存放在用户指针的前面一段地址空间。 - 2.
malloc
返回给用户的指针指向的是这块内存中跳过元数据后的用户可用区域。 - 3. 当调用
free(ptr)
时,free
会根据传入的指针ptr
,向前偏移这段元数据大小(比如16字节),读取这块内存的元数据信息,从中获取该内存块的实际大小。 - 4. 这样,
free
就能准确知道要释放的内存范围,并将这块内存回收到空闲链表或内存池中,供后续的分配使用。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1208
文章版权归作者所有,未经允许请勿转载。
THE END