在C中,函数malloc接受一个参数,指定alloacte的字节数。 但是free函数如何不接受任何参数而是指针。 free如何知道它有多少字节可以释放?
答案 0 :(得分:8)
诸如分配大小之类的信息保存在内存分配器本身内。
在内部,有一些数据结构可以保存所有活动内存分配,大小和地址的列表。它的确切工作原理相当复杂,因为有许多不同的内存分配算法适合不同的目的和分配大小。
通常,大小存储为malloc()
返回的地址下方的固定偏移量,但这只是一个实现细节。
答案 1 :(得分:3)
一种相当常见的方法是,在返回指向分配的其余内存的指针之前,通过sizeof(size_t)增加分配并在开始时存储长度。释放内存然后只需要查看被隐藏的长度。