pet*_*ica 6 c linux malloc glibc x86-64
我有一个指针。我知道它的地址(我作为函数的参数得到),并且我知道它指向先前由malloc()调用分配的内存地址。
有没有办法知道这个分配的内存块的大小?
我更喜欢跨平台的标准解决方案,但我认为这些都不存在。因此,任何事情都可以,即使是核心的低级 malloc 数据结构操作,如果没有更好的话。我将 glibc 与 x86_64 架构一起使用,并且没有计划在其他地方运行结果。我不是在寻找通用答案,它可以特定于 glibc/x86_64。
我认为,这些信息应该可用,realloc()否则无法使用。
这个问题要求通用的、符合标准的解决方案,这是不可能的。我正在寻找一个可能的 glibc/x86_64 解决方案,因为 glibc 是开源的,而 glibcrealloc()需要它来工作,这个问题允许通过在低级 malloc 内部以非标准方式挖掘来回答。
malloc_usable_size返回传递的指针指向的已分配内存块中的可用字节数。这不一定是原始请求的大小;它是提供的大小,为了方便分配软件,可能会更大。
GNU C 库显然没有直接记录这一点:
malloc_usable_size但没有记录它的行为,它似乎是那里完整文档中唯一提到的。malloc_usable_size。所以我想你可能认为最后一页是 GNU C 库的认可。它说size_t malloc_usable_size(void *ptr)“返回 指向的块中的可用字节数ptr,指向由malloc(3)或相关函数分配的内存块的指针”,并表示该函数是在 中声明的<malloc.h>。此外,如果ptr为空,则返回零。