【发布时间】:2011-12-08 10:16:44
【问题描述】:
在 C 中,函数 malloc 接受一个参数,指定要分配多少字节。 函数 free 不接受任何参数,而是一个指针。 free 如何知道它需要释放多少字节?
【问题讨论】:
标签: c
在 C 中,函数 malloc 接受一个参数,指定要分配多少字节。 函数 free 不接受任何参数,而是一个指针。 free 如何知道它需要释放多少字节?
【问题讨论】:
标签: c
诸如分配大小之类的信息保存在内存分配器本身中。
在内部,有一些数据结构保存了所有活动内存分配、它们的大小和地址的列表。它的具体工作方式相当复杂,因为有许多不同的内存分配算法适用于不同的目的和分配大小。
通常,大小存储为位于malloc() 返回的地址下方的固定偏移量,但这只是一个实现细节。
【讨论】:
一种相当常见的分配方式是通过 sizeof(size_t) 增加分配并在开始时存储长度,然后返回指向其余已分配内存的指针。然后释放内存只需要查看被隐藏的长度。
【讨论】: