Memory 检查我的程序使用了多少内存
我有一个C代码程序在我的计算机上运行,我需要检查我的程序在运行时使用了多少内存。有什么工具我可以用吗 PS:massif工具(Memory 检查我的程序使用了多少内存,memory,Memory,我有一个C代码程序在我的计算机上运行,我需要检查我的程序在运行时使用了多少内存。有什么工具我可以用吗 PS:massif工具(valgrind)在这种情况下有效吗?我已经运行了它,但我不知道如何解释它创建的图形 PPS:我正在使用Linux(eOs)。如果您正在使用Linux,使用一些命令,您可以看到程序的内存消耗,如 top -p Process id pmap pid ps aux 简单的内存消耗,您可以使用Valgrind的memcheck工具进行检查。 要解释地块图,应阅读详细手册
valgrind
)在这种情况下有效吗?我已经运行了它,但我不知道如何解释它创建的图形
PPS:我正在使用Linux(eOs)。如果您正在使用Linux,使用一些命令,您可以看到程序的内存消耗,如
top -p Process id
pmap pid
ps aux
简单的内存消耗,您可以使用Valgrind的memcheck工具进行检查。
要解释地块图,应阅读详细手册。
如果您在windows中,我想您的任务管理器将是一个很大的帮助。仔细阅读以供参考。如果您使用的是linux,使用一些命令,您可以看到程序的内存消耗,如
top -p Process id
pmap pid
ps aux
简单的内存消耗,您可以使用Valgrind的memcheck工具进行检查。
要解释地块图,应阅读详细手册。
如果您在windows中,我想您的任务管理器将是一个很大的帮助。查看此内容以供参考。一种方法是捕获对堆函数(如malloc、realloc、calloc)的所有调用,然后将总大小相加。如果您的程序中没有这种机制,您仍然可以使用linux的LD_PRELOAD机制在不更改程序的情况下执行此操作。你只需要编译一个小的共享库, 它有以下功能
void* malloc (size_t size);
void* calloc (size_t num, size_t size);
void* realloc (void* ptr, size_t size);
然后可以实现函数来捕获大小
void* malloc (size_t size) {
totalCount += size;
real_malloc (size_t size)
}
有关实现的详细信息,您还可以查看前面的答案。就我个人而言,我想说的是,在程序中执行这种机制,在内部捕获调用并计算分配的内存 一种方法是捕获对堆函数(如malloc、realloc、calloc)的所有调用,然后汇总总大小。如果您的程序中没有这种机制,您仍然可以使用linux的LD_PRELOAD机制在不更改程序的情况下执行此操作。你只需要编译一个小的共享库, 它有以下功能
void* malloc (size_t size);
void* calloc (size_t num, size_t size);
void* realloc (void* ptr, size_t size);
然后可以实现函数来捕获大小
void* malloc (size_t size) {
totalCount += size;
real_malloc (size_t size)
}
有关实现的详细信息,您还可以查看前面的答案。就我个人而言,我想说的是,在程序中执行这种机制,在内部捕获调用并计算分配的内存 Massif是一个很好的工具,它可以显示程序在一段时间内使用了多少内存。但它也有一些缺点:
- 所有的研磨工具都很慢;如果您的程序很慢,Massif将进一步降低速度(我认为是10倍)
- 你必须重新启动你的程序才能使用它,如果你的程序已经在运行,你不能用Valgrind(和Massif)截获它
- 如果希望Massif报告显示代码内存中使用的位置,则必须使用“-g”标志编译程序
ms_print massif.out.1234 > output
您基本上不需要“输出”部分,但我发现用更少的(或其他一些文本文件读取器)解释结果比只滚动浏览终端历史更容易。在输出的顶部,您将看到内存消耗随时间变化的图表。在下面,您将看到一些任意时间间隔的快照,从中可以找到代码中占用最多内存的位置
有一些图形工具可以解释地块结果,但我从未觉得需要它们。研究来自ms_print的报告,您将学会解释其结果
祝你好运 Massif是一个很好的工具,它可以显示程序在一段时间内使用了多少内存。但它也有一些缺点:
- 所有的研磨工具都很慢;如果您的程序很慢,Massif将进一步降低速度(我认为是10倍)
- 你必须重新启动你的程序才能使用它,如果你的程序已经在运行,你不能用Valgrind(和Massif)截获它
- 如果希望Massif报告显示代码内存中使用的位置,则必须使用“-g”标志编译程序
ms_print massif.out.1234 > output
您基本上不需要“输出”部分,但我发现用更少的(或其他一些文本文件读取器)解释结果比只滚动浏览终端历史更容易。在输出的顶部,您将看到内存消耗随时间变化的图表。在下面,您将看到一些任意时间间隔的快照,从中可以找到代码中占用最多内存的位置
有一些图形工具可以解释地块结果,但我从未觉得需要它们。研究来自ms_print的报告,您将学会解释其结果
祝你好运 你在用什么操作系统?无论如何,“top”可以告诉你一个进程正在使用多少内存…你在使用哪个操作系统?你在使用哪个操作系统?不管怎样,“top”可以告诉你一个进程正在使用多少内存…你在使用哪个操作系统?我在使用linux,我不能使用top,因为程序运行得非常快。我在使用linux,我不能使用top,因为程序运行得非常快。