考虑以下C程序'pause.c':
void main() { pause(); }
使用此命令'gcc -Os pause.c -o pause'在x64 Linux 3.0.0-16-generic上进行编译,生成大小约为8KB的可执行文件。当我运行这个可执行文件并使用'pmap -d PID'检查其精确的内存占用时,它告诉我分配给进程的私有内存是192KB(它在不同的系统中通常在128KB到192KB之间变化)。
使用valgrind和massif检查进程无法检测到任何内存分配事件。我怀疑192KB的数字是准确的,但我发现启动'暂停'过程的5个实例确实消耗了大约1MB的系统内存。
我无法解释这种记忆的起源,任何人都可以提供一些关于为什么这种记忆被分配以及任何可能减少它的潜在行动的见解吗?欢呼。
答案 0 :(得分:10)
降低堆栈限制将降低内存占用量:
ulimit -s 8