首页 > 解决方案 > 两台不同 Linux 计算机上 C 可执行文件的资源分配

问题描述

我正在两台不同的 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

我很困惑为什么这些值在两台计算机/发行版之间存在如此大的差异。这种内存分配模式的原因是什么?是编译器分配了这些内存资源吗?还是内核决定内存分配?

标签: clinuxgetrusage

解决方案


可执行文件很可能与其他一些进程共享内存。我停止了桌面环境并杀死了大多数不需要的程序,并获得了一致的值 1500。尽管启用了桌面管理器,但分配给进程的内存大小不同。


推荐阅读