glibc(GNU C 库)是否提供了一种获取已分配内存块大小的方法?
Does glibc (GNU C Library) provide a way to obtain the size of an allocated memory block?
我有一个指针。我知道它的地址(我得到了一个函数的参数),我知道它指向一个先前由 malloc()
调用分配的内存地址。
有没有办法知道这个分配的内存块的大小?
我更喜欢跨平台的标准解决方案,但我认为这些都不存在。因此,任何事情都可以,即使是硬核低级 malloc 数据结构操作,如果没有更好的话。我将 glibc 与 x86_64 体系结构一起使用,并且没有计划在其他地方 运行 结果。 我不是在寻找通用答案,它可以特定于 glibc/x86_64。
我想,这个信息应该是可用的,否则realloc()
无法工作。
This question 要求一个通用的、符合标准的解决方案,这是不可能的。我正在寻找一个可能的 glibc/x86_64 解决方案,因为 glibc 是开源的,而 glibc realloc()
需要它才能工作,这个问题允许通过在低端以非标准方式挖掘来回答级别 malloc 内部。
malloc_usable_size
returns 传递的指针指向的已分配内存块中的可用字节数。这不一定是原始请求的大小;就是提供的大小,可能会大一些,看配置软件方便。
GNU C 库显然没有直接记录这一点:
- This part of the GNU C Library documentation 说它提供
malloc_usable_size
但没有记录它的行为,它似乎是完整文档中唯一提到的地方。
- This GNU C Library page says its API is documented by the Linux man-pages project, among others, and those pages point to this for
malloc_usable_size
.
所以我想您可能会认为最后一页已经获得了 GNU C 库的认可。它说 size_t malloc_usable_size(void *ptr)
“returns ptr
指向的块中的可用字节数,指向由 malloc(3)
或相关函数分配的内存块的指针,”并表示该函数在 <malloc.h>
中声明。此外,如果 ptr
为空,则返回零。
我有一个指针。我知道它的地址(我得到了一个函数的参数),我知道它指向一个先前由 malloc()
调用分配的内存地址。
有没有办法知道这个分配的内存块的大小?
我更喜欢跨平台的标准解决方案,但我认为这些都不存在。因此,任何事情都可以,即使是硬核低级 malloc 数据结构操作,如果没有更好的话。我将 glibc 与 x86_64 体系结构一起使用,并且没有计划在其他地方 运行 结果。 我不是在寻找通用答案,它可以特定于 glibc/x86_64。
我想,这个信息应该是可用的,否则realloc()
无法工作。
This question 要求一个通用的、符合标准的解决方案,这是不可能的。我正在寻找一个可能的 glibc/x86_64 解决方案,因为 glibc 是开源的,而 glibc realloc()
需要它才能工作,这个问题允许通过在低端以非标准方式挖掘来回答级别 malloc 内部。
malloc_usable_size
returns 传递的指针指向的已分配内存块中的可用字节数。这不一定是原始请求的大小;就是提供的大小,可能会大一些,看配置软件方便。
GNU C 库显然没有直接记录这一点:
- This part of the GNU C Library documentation 说它提供
malloc_usable_size
但没有记录它的行为,它似乎是完整文档中唯一提到的地方。 - This GNU C Library page says its API is documented by the Linux man-pages project, among others, and those pages point to this for
malloc_usable_size
.
所以我想您可能会认为最后一页已经获得了 GNU C 库的认可。它说 size_t malloc_usable_size(void *ptr)
“returns ptr
指向的块中的可用字节数,指向由 malloc(3)
或相关函数分配的内存块的指针,”并表示该函数在 <malloc.h>
中声明。此外,如果 ptr
为空,则返回零。