Linux 为什么在查找内存使用峰值时会得到不同的结果?
在Linux中,我使用Linux 为什么在查找内存使用峰值时会得到不同的结果?,linux,memory-management,Linux,Memory Management,在Linux中,我使用/usr/bin/time-f%M工具(gnu time)来获取单个进程/程序所用内存的峰值。但是每次我运行这个命令,我都会得到不同的结果 这种差异的原因是什么 如何获得进程消耗的最大内存的准确值 p、 我已经使用了其他方法,比如从内存中获取快照(比如从/proc/pid读取),但是由于我的程序结束得太快,我不想要任何采样率非常小的东西。任何不确定的过程都可能导致每次使用不同的内存。例如,即使您执行相同的操作,您也永远无法运行Gimp或Chrome这样的大型程序并两次获得相
/usr/bin/time-f%M
工具(gnu time)来获取单个进程/程序所用内存的峰值。但是每次我运行这个命令,我都会得到不同的结果
p、 我已经使用了其他方法,比如从内存中获取快照(比如从
/proc/pid
读取),但是由于我的程序结束得太快,我不想要任何采样率非常小的东西。任何不确定的过程都可能导致每次使用不同的内存。例如,即使您执行相同的操作,您也永远无法运行Gimp或Chrome这样的大型程序并两次获得相同的数字
然而,如果您看到一个简单的、高度确定的过程中内存使用的变化,您可能已经启用了地址空间布局随机化
下面是一个例子foo.c
:
int main() {
return 0;
}
您可以看到它每次都有不同的内存使用情况:
$ gcc foo.c -o foo
$ /usr/bin/time -f +%M ./foo
+1144
$ /usr/bin/time -f +%M ./foo
+1048
$ /usr/bin/time -f +%M ./foo
+1060
这是因为ASLR已完全启用:
$ cat /proc/sys/kernel/randomize_va_space
2
如果将其关闭:
$ sudo tee /proc/sys/kernel/randomize_va_space <<< 0
0
但别忘了重新打开它以增加安全性:
sudo tee /proc/sys/kernel/randomize_va_space <<< 2
sudotee/proc/sys/kernel/randomize\u va\u space进程在做什么?我有一个实验程序,只是用C++创建了一个简单的向量,还有一个用python创建了一个整数列表的程序。我不知道如何才能找出与斯特拉斯的不同之处。
sudo tee /proc/sys/kernel/randomize_va_space <<< 2