На этот вопрос нет однозначного ответа, поскольку вы не можете точно определить объем памяти, используемый процессом. Большинство процессов в Linux используют разделяемые библиотеки. Например, предположим, что вы хотите вычислить использование памяти для процесса 'ls'. Вы считаете только память, используемую исполняемым файлом 'ls' (если бы вы могли ее изолировать)? Как насчет libc? Или все эти другие библиотеки, необходимые для запуска 'ls'?
linux-gate.so.1 => (0x00ccb000)
librt.so.1 => /lib/librt.so.1 (0x06bc7000)
libacl.so.1 => /lib/libacl.so.1 (0x00230000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00162000)
libc.so.6 => /lib/libc.so.6 (0x00b40000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00cb4000)
/lib/ld-linux.so.2 (0x00b1d000)
libattr.so.1 => /lib/libattr.so.1 (0x00229000)
libdl.so.2 => /lib/libdl.so.2 (0x00cae000)
libsepol.so.1 => /lib/libsepol.so.1 (0x0011a000)
Можно утверждать, что они используются другими процессами, но «ls» не может быть запущен в системе без их загрузки.
Кроме того, если вам нужно знать, сколько памяти требуется процессу для планирования емкости, вам необходимо рассчитать, сколько использует каждая дополнительная копия процесса. Я думаю, что / proc / PID / status может дать вам достаточно информации об использовании памяти за один раз. С другой стороны, valgrind предоставит вам лучший профиль использования памяти на протяжении всей жизни программы