0

我正在 Linux 中的 C++ 程序中工作。现在我想检查内存是如何在我的程序中分配的。由于我使用的库很复杂,我无法手动估计。

我在网上搜索了一下。有人建议使用 valgrind。我使用它,但它使我的程序崩溃。也有人使用 getrusage ( http://linux.die.net/man/2/getrusage ),但我发现很多负面评论。

有人对此有建议吗?

4

2 回答 2

0

之前推荐SIGAR

它似乎在运行时提供了主要的总内存/cpu 使用率,但可能很有用,因为它具有多种语言的绑定并在许多平台上工作。

至于更详细的每个进程信息,您可以获得常驻、共享、虚拟内存总数以及 i/o 和页面错误。

于 2013-06-13T14:48:39.530 回答
0

如果您的内存是由 malloc 分配的,那么来自 gdb(或您的代码):

(gdb) 调用 malloc_stats()

http://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html

3.2.2.11 malloc 内存分配统计

您可以通过调用 mallinfo 函数获取有关动态内存分配的信息。此函数及其相关数据类型在 malloc.h 中声明;它们是标准 SVID/XPG 版本的扩展。

— 数据类型:struct mallinfo
此结构类型用于返回有关动态内存分配器的信息。它包含以下成员:

int arena
这是 malloc 用 sbrk 分配的内存的总大小,以字节为单位。
int ordblks
这是未使用的块数。(内存分配器在内部从操作系统获取内存块,然后将它们分割以满足单独的 malloc 请求;请参阅 Efficiency 和 Malloc。)
int smblks
该字段未使用。
int hblks
这是使用 mmap 分配的块的总数。
int hblkhd
这是使用 mmap 分配的内存的总大小,以字节为单位。
int usmblks
该字段未使用。
int fsmblks
该字段未使用。
int uordblks
这是由 malloc 分发的块所占用的内存的总大小。
int fordblks
这是空闲(未使用)块占用的内存总大小。
int keepcost
这是通常与堆末端(即虚拟地址空间数据段的高端)接壤的最高可释放块的大小。
— 函数:struct mallinfo mallinfo (void)
此函数以struct mallinfo 类型的结构返回有关当前动态内存使用情况的信息。

于 2013-06-13T15:07:27.720 回答