为什么getrusage在同一程序的不同运行上返回不同的ru_maxrss?

时间:2019-05-11 09:50:39

标签: c linux memory

我有一个程序可以多次重载同一个dumy共享库。每次重新加载后,我使用getrusage来获取ru_maxrss。结果因运行而异。我认为唯一的区别是映射区域的偏移量。但这如何影响ru_maxrss?我正在使用Ubuntu 18.04.2 LTS。

主代码

#include <string.h>
#include <stdlib.h>
#include <sys/resource.h>
#include <dlfcn.h>
#include <stdio.h>
#include <assert.h>
#include <unistd.h>

const char *lib = "./dumy/libdumy.so";

long rss[1000];

int main(int argc, char **argv) {
    assert (argc == 2);
    int n = atoi(argv[1]);
    struct rusage usg;
    for (size_t i = 1; i <= n; ++i) { 
        void *handle = dlopen(lib, RTLD_LAZY);
        assert (handle != NULL);   
        assert (dlclose(handle) == 0);    
        assert (getrusage(RUSAGE_SELF, &usg) == 0);
        rss[i] = usg.ru_maxrss;
    }   
    for (size_t i = 1; i <= n; ++i) { 
        printf("%ld\n", rss[i]);
    }
}

傻瓜代码

int f() {}

我希望每次运行的输出都一样。实际输出有时是全部1392,有时是全部1448,有时是1440,然后是1448,等等。

0 个答案:

没有答案