gpt4 book ai didi

c - Malloc header 内容

转载 作者:太空狗 更新时间:2023-10-29 17:14:38 24 4
gpt4 key购买 nike

因此在大多数实现中,malloc 在分配的内存之前存储一个 header ,以跟踪分配的内存大小(以便它可以执行 free 和 recalloc)。标题内容是什么?

我写了一个天真的代码来找到它,但它没有任何意义

int * ptr;
ptr = malloc(12*sizeof(int));
printf("Header = %d\n",*(ptr-1));

返回

Header = 57

这里发生了什么?

最佳答案

我猜您想了解内存是如何分配的。我会忽略未定义行为的答案。当您谈论可移植性等时,他们(当然)是对的,但这不是您的问题。我认为尝试弄清楚分配是如何完成的是一个非常好的主意。

首先,我鼓励您开始查看适用于您的平台的 malloc 实现。如果该代码不可用,那你就倒霉了,你唯一能做的就是谷歌搜索分配是如何完成的线索。

如果你运行linux,你可以看看glibc或uclibc的malloc实现。这是 uclibc 实现的链接: http://git.uclibc.org/uClibc/tree/libc/stdlib/malloc/malloc.c代码有很多注释,但可能会让人不知所措。

关于您的问题,请查看 http://git.uclibc.org/uClibc/tree/libc/stdlib/malloc/malloc.h在第 104 行。这是你正在谈论的部分。您会看到布局取决于 MALLOC_HEADER_SIZE,这对于不同的系统可能不同。通过阅读代码,您可以了解使用哪些类型,以及存储内存大小的偏移量(在这个具体实现中)

当然,上面只是 uclibc 的示例实现,可以帮助您入门...

关于c - Malloc header 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com