子进程使用的 /usr/bin/time 命令(可能)给出错误的数据

问题描述 投票:0回答:1

我正在做一个网络项目,你可以在其中解决编程问题。我的问题是关于最大驻留集大小,对于(一个示例)读取数字并输出从 1 到 n 的数字之和来说,它似乎非常高。对于 C# 或 Java 代码,我得到的最大驻留集大小为 24008 kbytes,这相当于 24 MB,而且非常高。对我来说,给代码“评分”很困难。

我使用 /usr/bin/time 来阅读这些内容,这是我得到的最佳选择,因为我不必为每种语言使用不同的工具。我不太确定这是否能给我正确的读数。也许我错过了什么,但我无法真正看到它。我应该提到的是,我在 NodeJS 环境中使用这些子进程。评分的过程是我先将其编译成可执行文件,然后运行它。不知道为什么阅读量这么高。在 C/C++ 中,指标没有那么高,但仍然很高(2000KB+)。

c# node.js linux memory metrics
1个回答
0
投票

这似乎并不是完全没有道理。 C# 和 Java 是在具有 JIT 的虚拟机上运行的程序,因此必须启动虚拟机以及 JIT 编译器,因此您将使用相当多的内存。由于这个原因,您通常不会在内存受限的环境中使用这些语言。

对于C和C++,我在下面用Rust编写了一个类似的程序,它需要1760KiB最大RSS(大约1.71 MiB)。由于 Rust 编译为与 C 和 C++ 非常相似的机器代码,这似乎是合理的。

fn main() {
    let dest: u64 = std::env::args().nth(1).unwrap().parse().unwrap();
    println!("sum = {}", (1..=dest).sum::<u64>());
}
© www.soinside.com 2019 - 2024. All rights reserved.