I have written two C programmes
- one is using function pointer, and
- the other without function pointer.
Now i want to know the memory consumed by the two programmes , to see how memory can optimized.
It would depend on what kind of stats you want, but if you're writing a program in C running on Linux, you'd definitely better know about Valgrind.
Valgrind can, not only profile detailed memory usage of your program, but also detect memory access violations which are common in C and possibly very hard to debug.
If you are only interested in the memory used after the fact, then use GNU
command time -v myprogram
(the above uses the
bash way of invoking the external
time command rather than the
bash builtin, your shell may vary).
memusage -T ./myprogram
If you are interested in the memory used on an ongoing basis (i.e. during a long running process), one of the other answers is probably better. See also this related question: Memory usage command with syntax similar to the time command
Here's the resident set size and virtual memory size of all sshd processes on one system:
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
Or perhaps easier:
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
See the ps manpage for more options.
The easiest to just catch the heap pointers through sbrk(0), cast them as 64-bit unsigned integers, and compute the difference after the memory gets allocated.