问题: 确定下面malloc请求序列产生的块大小和头部值。
假设:
1)分配器保持双字对齐,并且使用块格式如图9-35中所示的隐式空闲链表。
2)块大小向上舍入为最接近的8字节的倍数。
问题: 确定下面malloc请求序列产生的块大小和头部值。
假设:
1)分配器保持双字对齐,并且使用块格式如图9-35中所示的隐式空闲链表。
2)块大小向上舍入为最接近的8字节的倍数。
参考GPT和自己的思路:
根据题目中提供的信息,我们可以得到以下几点:
分配器使用隐式空闲链表,块格式如图9-35所示。
分配器保持双字对齐,块大小向上舍入为最接近的8字节的倍数。
假设 malloc 请求序列为:
malloc(16);
malloc(32);
malloc(64);
根据题目中所给的块格式和对齐方式,我们可以得到以下信息:
每个块的最小大小为16字节。
每个块的头部大小为8字节(4字节指针和4字节标记位)。
当请求大小为16字节时,系统会使用一个16字节的块来满足请求,即使用第一个空闲块,并将其从空闲链表中移除。
当请求大小为32字节时,系统会使用一个64字节的块来满足请求,即使用第二个空闲块,并将其拆分成一个32字节的块和一个32字节的空闲块,将后者加入空闲链表中。
当请求大小为64字节时,系统会使用一个64字节的块来满足请求。
所以,这个 malloc 请求序列产生的块大小为16字节、64字节、64字节,头部值分别为8、8、8。