获取使用malloc分配的内存大小

4

有没有一种简单的方法可以知道程序中每个malloc分配的总内存量? 我正在遭受内存泄漏的困扰,我想找出是哪里出了问题。


https://dev59.com/THVC5IYBdhLWcg3woCrN如何在C语言中从指针获取数组的大小?https://dev59.com/GHM_5IYBdhLWcg3w1G6N如何在使用malloc分配内存块时获取其大小? - cnicutar
5个回答

3

在标准、操作系统中立的方式下是没有办法的。

但是使用GNU Glibc,你可以使用mallinfo

在Linux系统中,你可以通过伪文件/proc/self/maps(或者提供更多细节的/proc/self/smaps)了解虚拟内存映射。对于pid为123的进程,你可以读取/proc/123/maps

当然,细节是与系统有关的。

要查找内存泄漏,请使用valgrind等工具。


2
通过一个具体的malloc,是的,你可以获得你要求的内存大小,没有多余的空间 :-)
实际上,它可能会你一点更多的空间(许多实现将会给你16或32字节的倍数),但在标准C中无法确定。使用超过所需内存大小的空间是未定义的行为,无论进行何种填充。
一些系统有一个mallinfo函数,您可以调用它来获取整个内存区域的统计信息,如果您想知道已分配的总内存量。你可以研究一下,但同样,这不是标准的做法。

0

没有标准方法可以这样做。微软的 C 库有一个 _heapwalk 函数,你可以用它来计算。


0
你首先分配了内存,只需记下分配的大小即可。可以使用结构体来存储指针和大小。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接