我正在两台不同的 linux 计算机上编译和运行以下 c 文件(华为笔记本电脑 8GB RAM 上的 Arch,iMac 2017 32GB RAM 上的 Ubuntu)。
#include <stdio.h>
#include <sys/resource.h>
long get_mem_usage()
{
struct rusage myusage;
getrusage(RUSAGE_SELF, &myusage);
return myusage.ru_maxrss;
}
int main()
{
printf("usage: %ld\n", get_mem_usage());
return 0;
}
编译器是: gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1
gcc (Arch Linux 9.3.0-1) 9.3.0
在 Ubuntu 上,我一直得到:
usage: 2432
usage: 2432
usage: 2432
在 Arch 上,输出并不一致并且大得多:
usage: 100584
usage: 100964
usage: 100524
我很困惑为什么这些值在两台计算机/发行版之间存在如此大的差异。这种内存分配模式的原因是什么?是编译器分配了这些内存资源吗?还是内核决定内存分配?