我写了两个C程序
- 一种是使用函数指针,并且
- 另一个没有函数指针。
现在我想知道这两个程序消耗的内存,看看如何优化内存。
答案1
如果您只对事后使用的内存感兴趣,请使用 GNU time
:
command time -v myprogram
(上面使用的是bash
调用外部time
命令而不是bash
内置命令的方式,您的shell可能会有所不同)。
或者,GNU memusage
:
memusage -T ./myprogram
如果您对持续使用的内存(即在长时间运行的过程中)感兴趣,那么其他答案之一可能更好。另请参阅此相关问题:内存使用命令,语法与时间命令类似
答案2
答案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 位无符号整数,并在分配内存后计算差值。