Memory 检查我的程序使用了多少内存

Memory 检查我的程序使用了多少内存,memory,Memory,我有一个C代码程序在我的计算机上运行,我需要检查我的程序在运行时使用了多少内存。有什么工具我可以用吗 PS:massif工具(valgrind)在这种情况下有效吗?我已经运行了它,但我不知道如何解释它创建的图形 PPS:我正在使用Linux(eOs)。如果您正在使用Linux,使用一些命令,您可以看到程序的内存消耗,如 top -p Process id pmap pid ps aux 简单的内存消耗,您可以使用Valgrind的memcheck工具进行检查。 要解释地块图,应阅读详细手册

我有一个C代码程序在我的计算机上运行,我需要检查我的程序在运行时使用了多少内存。有什么工具我可以用吗

PS:massif工具(
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”标志编译程序
如果使用程序运行Massif,则可以运行

ms_print massif.out.1234 > output
您基本上不需要“输出”部分,但我发现用更少的(或其他一些文本文件读取器)解释结果比只滚动浏览终端历史更容易。在输出的顶部,您将看到内存消耗随时间变化的图表。在下面,您将看到一些任意时间间隔的快照,从中可以找到代码中占用最多内存的位置

有一些图形工具可以解释地块结果,但我从未觉得需要它们。研究来自ms_print的报告,您将学会解释其结果


祝你好运

Massif是一个很好的工具,它可以显示程序在一段时间内使用了多少内存。但它也有一些缺点:

  • 所有的研磨工具都很慢;如果您的程序很慢,Massif将进一步降低速度(我认为是10倍)
  • 你必须重新启动你的程序才能使用它,如果你的程序已经在运行,你不能用Valgrind(和Massif)截获它
  • 如果希望Massif报告显示代码内存中使用的位置,则必须使用“-g”标志编译程序
如果使用程序运行Massif,则可以运行

ms_print massif.out.1234 > output
您基本上不需要“输出”部分,但我发现用更少的(或其他一些文本文件读取器)解释结果比只滚动浏览终端历史更容易。在输出的顶部,您将看到内存消耗随时间变化的图表。在下面,您将看到一些任意时间间隔的快照,从中可以找到代码中占用最多内存的位置

有一些图形工具可以解释地块结果,但我从未觉得需要它们。研究来自ms_print的报告,您将学会解释其结果


祝你好运

你在用什么操作系统?无论如何,“top”可以告诉你一个进程正在使用多少内存…你在使用哪个操作系统?你在使用哪个操作系统?不管怎样,“top”可以告诉你一个进程正在使用多少内存…你在使用哪个操作系统?我在使用linux,我不能使用top,因为程序运行得非常快。我在使用linux,我不能使用top,因为程序运行得非常快。