09-练习
7.4 练习
7-1. 修改程序清单7-1中的程序(free_and_sbrk.c),在每次执行malloc()后打印出program break的当前值。指定一个较小的内存分配尺寸来运行该程序。这将证明malloc()不会在每次被调用时都调用sbrk()来调整program break的位置,而是周期性地分配大块内存,并从中将小片内存返回给调用者。
7-2. (高级)实现malloc()和free()。
①译者注:遵作者邮件嘱改动原文,据称此为编译器提高内存访问效率的举措之一。
②译者注:详见http://en.wikipedia.org/wiki/Off-by-one_error。
③译者注:参见图7-3堆中空闲内存块与已分配内存块的“杂居”状态,此处应指与ptr指向的已分配内存块的地址相邻的空闲内存块。
④译者注:简而言之,该内存块的起始地址是alignment参数的整数倍。
⑤译者注:通过调整栈指针自然释放了栈中所分配的内存。