почему getrusage возвращает разные ru_maxrss при разных запусках одной и той же программы? - PullRequest
0 голосов
/ 11 мая 2019

У меня есть программа, которая несколько раз перезагружает одну и ту же фиктивную разделяемую библиотеку. После каждой перезагрузки я использую 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 и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...