malloc的块的大小似乎错误

时间:2018-10-26 19:02:19

标签: c malloc

我读到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?

谢谢

1 个答案:

答案 0 :(得分:3)

page you refer to in a comment讨论了特定的 C实现。在this page上,他们告诉您这是具有GCC Ubuntu 4.8.4-2ubuntu1〜14.04.3的Ubuntu 4.4.0-31通用x86_64,它以粗体显示:“ 我们将涵盖的所有内容在该系统/环境中为true,但在另一个系统上可能会不同。”

C实现仅需要产生C标准中指定的结果。 malloc和语言工作其他方面的基础机制可能以许多不同的方式实现,并且就如何实现方式,没有理由期望您使用的C实现与其他实现的行为方式相同。 malloc在内部起作用。