glibc的malloc块大小在使用时是否有额外的位设置?
我问的原因是因为我写了一个简单的测试用例,我分配了几个块,然后从从基指针到每个块的低8字节偏移打印它的大小(如源代码中所述)。
像这样:
int main(void)
{
int* p1 = malloc(_p1);
int* p2 = malloc(_p2);
int* p3 = malloc(_p3);
printf("p3: %p %d\n",p3,_p3);
printf("p2: %p %d\n",p2,_p2);
printf("p1: %p %d\n",p1,_p1);
printf("p3-2: %5dd %5xh\n", *(p3-2), *(p3-2));
printf("p2-2: %5dd %5xh\n", *(p2-2), *(p2-2));
printf("p1-2: %5dd %5xh\n", *(p1-2), *(p1-2));
printf("p1 %p %p\n p-2\n", p1, p1-2);
printf("\n");
return 0;
}
示例输出;但是,显示大小始终为1byte额外。所以我的问题是,这个额外的字节来自哪里?
p3: 0x1d4e0b0 64
p2: 0x1d4e060 64
p1: 0x1d4e010 64
p3-2: 81d 51h
p2-2: 81d 51h
p1-2: 81d 51h
p1 0x1d4e010 0x1d4e008
我认为在使用chunk时可能会有一些设置,但是即使我释放了chunk,使用正确的偏移量查找其大小,它仍然显示相同的大小。
有人可以详细说明我做错了什么或这个字节来自哪里?
谢谢,