我读到malloc返回的地址之前的0x10字节包含请求malloc+0x10+1的内存块的大小但是,在下面的代码中,我向malloc请求8字节,malloc+0x10+1的大小应该是8+16+1=25:
int main( ){
void *p=malloc(8);
如果我检查malloc:返回的地址之前的0x10字节的内存
(gdb) p/x p
$3 = 0x555555756260
(gdb) x/16xb 0x555555756260 - 0x10
0x555555756250: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x555555756258: 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00
出现的大小为0x21(33(。为什么是33而不是25?
感谢
您在注释中引用的页面讨论特定的C实现。在这个页面上,他们告诉你这是Ubuntu 4.4.0-31-generic x86_64和GCC Ubuntu 4.8.4-2ubuntu114.04.3,并用粗体表示,"我们所涵盖的一切都适用于这个系统/环境,但在另一个系统上可能会有所不同。">
C实现只需要生成C标准中指定的结果。malloc
和语言的其他方面工作的底层机制可以用许多不同的方式来实现,在malloc
内部工作方面,没有理由期望您正在使用的C实现与另一个实现的行为方式相同。