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

Nag*_*raj 5 performance cpu c memory optimization

我写了两个 C 程序

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

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

yae*_*shi 5

这取决于你想要什么样的统计数据,但如果你正在用 C 语言编写一个在 Linux 上运行的程序,你肯定会更好地了解Valgrind

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

为了您的分析目的,看看有关具体分析工具,文档,尤其是MEMCHECK地块


mr.*_*tic 5

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

command time -v myprogram
Run Code Online (Sandbox Code Playgroud)

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

或者,GNU memusage

memusage -T ./myprogram
Run Code Online (Sandbox Code Playgroud)

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


小智 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
Run Code Online (Sandbox Code Playgroud)

或者也许更容易:

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
Run Code Online (Sandbox Code Playgroud)

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