我有一个程序可以多次重载同一个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
,等等。