CSSAPP 隐式空闲链表

问题: 确定下面malloc请求序列产生的块大小和头部值。

假设:

1)分配器保持双字对齐,并且使用块格式如图9-35中所示的隐式空闲链表。

2)块大小向上舍入为最接近的8字节的倍数。

参考GPT和自己的思路:

根据题目中提供的信息,我们可以得到以下几点:

  1. 分配器使用隐式空闲链表,块格式如图9-35所示。

  2. 分配器保持双字对齐,块大小向上舍入为最接近的8字节的倍数。

假设 malloc 请求序列为:

malloc(16);
malloc(32);
malloc(64);

根据题目中所给的块格式和对齐方式,我们可以得到以下信息:

  1. 每个块的最小大小为16字节。

  2. 每个块的头部大小为8字节(4字节指针和4字节标记位)。

  3. 当请求大小为16字节时,系统会使用一个16字节的块来满足请求,即使用第一个空闲块,并将其从空闲链表中移除。

  4. 当请求大小为32字节时,系统会使用一个64字节的块来满足请求,即使用第二个空闲块,并将其拆分成一个32字节的块和一个32字节的空闲块,将后者加入空闲链表中。

  5. 当请求大小为64字节时,系统会使用一个64字节的块来满足请求。

所以,这个 malloc 请求序列产生的块大小为16字节、64字节、64字节,头部值分别为8、8、8。