如何计算Linux中“C”程序消耗的内存

如何计算Linux中“C”程序消耗的内存

我写了两个C程序

  1. 一种是使用函数指针,并且
  2. 另一个没有函数指针。

现在我想知道这两个程序消耗的内存,看看如何优化内存。

答案1

如果您只对事后使用的内存感兴趣,请使用 GNU time

command time -v myprogram

(上面使用的是bash调用外部time命令而不是bash内置命令的方式,您的shell可能会有所不同)。

或者,GNU memusage

memusage -T ./myprogram

如果您对持续使用的内存(即在长时间运行的过程中)感兴趣,那么其他答案之一可能更好。另请参阅此相关问题:内存使用命令,语法与时间命令类似

答案2

这取决于你想要什么样的统计数据,但如果你正在用 C 语言编写一个在 Linux 上运行的程序,你肯定最好了解一下瓦尔格林德

Valgrind 不仅可以分析程序的详细内存使用情况,还可以检测 C 语言中常见且可能很难调试的内存访问违规。

为了进行分析,请查看有关特定分析工具的文档,尤其是内存检查地块

答案3

以下是一个系统上所有 sshd 进程的驻留集大小和虚拟内存大小:

ulric@qvp2:~$ ps -eo rss,vsz,args|grep sshd|grep -v grep
  448  55292 /usr/sbin/sshd -D
 5176 147460 sshd: ulric [priv]
 2776 149704 sshd: ulric@pts/3

或者也许更容易:

ulric@qvp2:~$ ps aux|head -n 1&&ps aux|grep sshd|grep -v grep
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     13221  0.0  0.0  55292   448 ?        Ss   Apr21   0:01 /usr/sbin/sshd -D
root     16046  0.0  0.5 147460  5176 ?        Ss   08:12   0:00 sshd: ulric [priv]
ulric    16187  0.0  0.2 149704  2776 ?        S    08:12   0:00 sshd: ulric@pts/3

有关更多选项,请参阅 ps 联机帮助页。

答案4

最简单的方法就是捕获堆指针sbrk(0),将它们转换为 64 位无符号整数,并在分配内存后计算差值。

相关内容