free函数释放空间的时候,是如何知道释放多大的空间呢?我们只给他传了个地址呀
malloc
和 free
实际上是 libc
提供的 library call,glibc
中会为每段 malloc 申请的地址生成一个 malloc chunk,这个 chunk 会比你申请的空间稍微大一点,多出来的空间中记录了当前 chunk 分配的空间大小和一些其他的消息。调用 free
的时候,就会通过查阅这些 chunk 的 meta 信息,找到相应的 chunk 并进行释放。
不需要知道多大空间,只需要告诉操作系统这块内存程序不再管理了。操作系统是知道哪些内存块被某个程序占用的