c语言 - malloc'd 块的大小似乎不对

  • 本文关键字:语言 malloc 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?

感谢

您在注释中引用的页面讨论特定的C实现。在这个页面上,他们告诉你这是Ubuntu 4.4.0-31-generic x86_64和GCC Ubuntu 4.8.4-2ubuntu114.04.3,并用粗体表示,"我们所涵盖的一切都适用于这个系统/环境,但在另一个系统上可能会有所不同。">

C实现只需要生成C标准中指定的结果。malloc和语言的其他方面工作的底层机制可以用许多不同的方式来实现,在malloc内部工作方面,没有理由期望您正在使用的C实现与另一个实现的行为方式相同。

相关内容

  • 没有找到相关文章

最新更新