gpt4 book ai didi

c - glibc(GNU C 库)是否提供了一种获取已分配内存块大小的方法?

转载 作者:行者123 更新时间:2023-12-03 13:58:55 25 4
gpt4 key购买 nike

我有一个指针。我知道它的地址(我作为函数的参数得到),并且我知道它指向先前由 malloc() 分配的内存地址。称呼。
有没有办法知道这个分配的内存块的大小?
我更喜欢跨平台的标准解决方案,但我认为这些不存在。因此,任何事情都可以,即使是硬核低级 malloc 数据结构操作,如果没有更好的话。我将 glibc 与 x86_64 架构一起使用,并且没有计划在其他地方运行结果。我不是在寻找一个通用的答案,它可以特定于 glibc/x86_64。
我认为,这个信息应该是可用的,否则realloc()无法工作。

This question要求一个通用的、符合标准的解决方案,这是不可能的。我正在寻找可能的 glibc/x86_64 解决方案,因为 glibc 是开源的,而 glibc realloc()需要这个工作,这个问题可以通过在低级 malloc 内部以非标准方式挖掘来回答。

最佳答案

malloc_usable_size返回所传递的指针所指向的已分配内存块中的可用字节数。这不一定是原始请求的大小;它是提供的大小,在分配软件方便时可能更大。
GNU C 库显然没有直接记录这一点:

  • This part of the GNU C Library documentation说它提供malloc_usable_size但没有记录它的行为,而且它似乎是那里完整文档中唯一提到的。
  • This GNU C Library page表示其 API 由 Linux man-pages project 记录等,并且这些页面指向 this for malloc_usable_size .

  • 所以我想你可能会认为最后一页有 GNU C 库的认可。它说 size_t malloc_usable_size(void *ptr) “返回 ptr 指向的 block 中的可用字节数, 指向 malloc(3) 分配的内存块的指针或相关函数”,表示该函数在 <malloc.h> 中声明.此外,如果 ptr为空,返回零。

    关于c - glibc(GNU C 库)是否提供了一种获取已分配内存块大小的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66160719/

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