9.9.12 综合:实现一个简单的分配器
P598
下面解释一下图9-41中的一些东西
Points to last byte of heap plus 1
的意思是堆的最后一个字节的下一个字节的起始位置mem_init
里面的Malloc
与malloc
是有区别的,前者只是提供一大块区域作为可用堆空间的模拟,而后者是分配可用堆空间(也就是将前者留出的空间的一部分进行分配)- 最开始还没有任何空间被分配,所以
mem_brk = (char•)mem_heap;
是正确的
- 最开始还没有任何空间被分配,所以
P600
图9-44中有一个mem_sbrk
,此时序言块和结尾块是紧挨在一起的,而且这个堆一共只有四个字(也就是mem_heap
与mem_brk
的差距就是四个字)
图9-45中有一个mem_sbrk
,在第12行之前,结尾块是没有动的,12行及之后就是在移动结尾块
P602
从图9-47中就可以看到malloc
这种用户函数是如何利用系统调用(比如sbrk
)的:malloc
是先在已有的堆空间里面找空闲块,找不到再像操作系统请求更多的堆空间