9.9.12 综合:实现一个简单的分配器

P598

下面解释一下图9-41中的一些东西

  • Points to last byte of heap plus 1的意思是堆的最后一个字节的下一个字节的起始位置
  • mem_init里面的Mallocmalloc是有区别的,前者只是提供一大块区域作为可用堆空间的模拟,而后者是分配可用堆空间(也就是将前者留出的空间的一部分进行分配)
    • 最开始还没有任何空间被分配,所以mem_brk = (char•)mem_heap;是正确的

P600

图9-44中有一个mem_sbrk,此时序言块和结尾块是紧挨在一起的,而且这个堆一共只有四个字(也就是mem_heapmem_brk的差距就是四个字)
图9-45中有一个mem_sbrk,在第12行之前,结尾块是没有动的,12行及之后就是在移动结尾块

P602

从图9-47中就可以看到malloc这种用户函数是如何利用系统调用(比如sbrk)的:malloc是先在已有的堆空间里面找空闲块,找不到再像操作系统请求更多的堆空间

posted @ 2025-08-26 22:52  最爱丁珰  阅读(5)  评论(0)    收藏  举报