Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么在查找内存使用峰值时会得到不同的结果?_Linux_Memory Management - Fatal编程技术网

Linux 为什么在查找内存使用峰值时会得到不同的结果?

Linux 为什么在查找内存使用峰值时会得到不同的结果?,linux,memory-management,Linux,Memory Management,在Linux中,我使用/usr/bin/time-f%M工具(gnu time)来获取单个进程/程序所用内存的峰值。但是每次我运行这个命令,我都会得到不同的结果 这种差异的原因是什么 如何获得进程消耗的最大内存的准确值 p、 我已经使用了其他方法,比如从内存中获取快照(比如从/proc/pid读取),但是由于我的程序结束得太快,我不想要任何采样率非常小的东西。任何不确定的过程都可能导致每次使用不同的内存。例如,即使您执行相同的操作,您也永远无法运行Gimp或Chrome这样的大型程序并两次获得相

在Linux中,我使用
/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