c - 两台不同 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
我很困惑为什么这些值在两台计算机/发行版之间存在如此大的差异。这种内存分配模式的原因是什么?是编译器分配了这些内存资源吗?还是内核决定内存分配?
解决方案
可执行文件很可能与其他一些进程共享内存。我停止了桌面环境并杀死了大多数不需要的程序,并获得了一致的值 1500。尽管启用了桌面管理器,但分配给进程的内存大小不同。
推荐阅读
- python - Python requests.post 在本地主机上超时
- reactjs - 根据用户输入动态更改 API 端点和基本 url
- flutter - 在重建时从 StatefulWidget 重用颤振状态
- javascript - Javascript for of 循环只运行一次
- python - Mindstorms EV3 如何通过蓝牙与我的 PC 通信?
- android - 照片未在 PhotoEditor 视图中加载?
- reactjs - React hooks - setInterval:导致渲染在状态更新之前开始
- r - 使用 rms 包中的 lrm() 和 validate() 时出现错误消息
- r - 在 R 中查找函数
- django - Django - 保持用户的最新记录