0


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;
}

示例输出;但是,显示大小始终是额外的 1 个字节。所以我的问题是,这个额外的字节是从哪里来的?

p3: 0x1d4e0b0 64
p2: 0x1d4e060 64
p1: 0x1d4e010 64

p3-2:    81d    51h
p2-2:    81d    51h
p1-2:    81d    51h

p1 0x1d4e010 0x1d4e008

我认为在使用块时可能设置了一些位,但即使我释放块并使用正确的偏移量查找其大小,它仍然显示相同的大小。

谁能详细说明我做错了什么或这个字节来自哪里?

谢谢,

4

0 回答 0