?malloc()用的是什么算法;free()是怎样释放内存的
在 K&R 第二版中关于malloc()是这样描述的:
malloc并不是从一个在编译时就确定的固定的固定大小的数组中分配存储空间,而是在需要时向系统申请。因为程序中的某些地方不通过malloc调用申请空间,所以malloc管理的空间不一定是连续的。这样空闲存储空间以空闲链表组织,每一块包含一个长度、一个指向下一块的指针和一个指向自身空间的指针。当有申请时,malloc会扫描空闲链表,直到找到一个足够大的为止(首次适应)。与之相对应的是“最佳适应”,它寻找满足条件的最小块。如果块的大小正好,就从链表移走并返给客户,如果太大就分成两部分:大小合适的返给客户,剩下的留给空闲链表。如果没有足够大的,就向系统申请。
释放过程首先搜索空闲链表,以找到可以插入被释放块的合适位置。如果与被释放块相邻的任一边是一个空闲块,则合成一个更大的。
上面提到malloc()有两种算法,即“首次适应”和“最佳适应”,实际用的是什么
free()一次释放的并不是malloc()申请的所有内存,怎么回事
还是说这个不是标准库函数的用法。