Linux 获取malloc的大小';d内存块?

Linux 获取malloc的大小';d内存块?,linux,malloc,Linux,Malloc,一些Linux代码在100个地方调用malloc,我需要知道任何一个块有多大。 通常我会在my_malloc函数中记录这些大小,但在本例中不允许这样做。有没有办法要求malloc子系统为malloc指针提供块大小?不幸的是,没有办法做到这一点。不幸的是,没有办法做到这一点 *((size_t *)ptr - 1) & ~7 /给我盖被子 /me Cover.您最好的选择是使用截获对malloc(定义)的呼叫。您甚至不需要重新编译源代码 根据您试图发现的内容,可能也很有用。您最好的办法是

一些Linux代码在100个地方调用malloc,我需要知道任何一个块有多大。
通常我会在my_malloc函数中记录这些大小,但在本例中不允许这样做。有没有办法要求malloc子系统为malloc指针提供块大小?

不幸的是,没有办法做到这一点。

不幸的是,没有办法做到这一点

*((size_t *)ptr - 1) & ~7
/给我盖被子


/me Cover.

您最好的选择是使用截获对malloc(定义)的呼叫。您甚至不需要重新编译源代码


根据您试图发现的内容,可能也很有用。

您最好的办法是使用来拦截对malloc(定义)的调用。您甚至不需要重新编译源代码


根据您试图发现的内容,它也可能有用。

哎哟。不确定这在64位系统上是否有效。我几乎可以肯定,对于超过128k左右的malloc()(glibc将使用mmap)来说,它将不起作用。但是快速破解的好主意:-)。说真的,
int
的大小?天哪<代码>*((大小)ptr-1)和~8至少。哦,我明白了。。。我不想在某个地方的代码中遇到这种情况,这是完全不可移植的。语言标准没有说明malloc子系统如何存储分配对象的大小,甚至没有说明它是如何存储分配对象的大小的。例如,
malloc(57)
可能分配64个字节,并且不保留原始大小的记录。或者,只要有足够的信息让
realloc
free
工作,就可能根本不会显式存储大小。不确定这在64位系统上是否有效。我几乎可以肯定,对于超过128k左右的malloc()(glibc将使用mmap)来说,它将不起作用。但是快速破解的好主意:-)。说真的,
int
的大小?天哪<代码>*((大小)ptr-1)和~8至少。哦,我明白了。。。我不想在某个地方的代码中遇到这种情况,这是完全不可移植的。语言标准没有说明malloc子系统如何存储分配对象的大小,甚至没有说明它是如何存储分配对象的大小的。例如,
malloc(57)
可能分配64个字节,并且不保留原始大小的记录。或者大小可能根本不会被显式存储,只要有足够的信息让
realloc
free
工作。我不得不用谷歌搜索一下LD_预加载技巧是什么,请也在你的答案中链接:)@Kimvais:嗯,我链接到了示例代码,这总比一句话的定义好:-)。好的,我还添加了另一个SO问题的链接。谢谢。我想我是那种认为它如何工作比它做什么更有趣的人:)我不得不用谷歌搜索一下LD_预加载技巧是什么,请也在你的答案中链接:)@Kimvais:嗯,我链接了示例代码,认为这总比一句话的定义好:-)。好的,我还添加了另一个SO问题的链接。谢谢。我想我是那种认为它如何工作比它做什么更有趣的人:)一个密切相关的问题:一个密切相关的问题:没有可移植的方法可以做到这一点,但如果目标是调试一个问题,一个不可移植的黑客可能就足够了。没有可移植的方法可以做到这一点,但是,如果目标是调试问题,那么一个不可移植的黑客可能就足够了。