- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
<分区>
我有一个 Rust 程序,它实现了对 64 位无符号整数的强力奇偶校验:
use std::io;
use std::io::BufRead;
fn parity(mut num: u64) -> u8 {
let mut result: u8 = 0;
while num > 0 {
result = result ^ (num & 1) as u8;
num = num >> 1;
}
result
}
fn main() {
let stdin = io::stdin();
let mut num: u64;
let mut it = stdin.lock().lines();
// skip 1st line with number of test cases
it.next();
for line in it {
num = line.unwrap().parse().unwrap();
println!("{}", parity(num));
}
}
当我向它提供包含 1000000 个无符号整数的输入文件时:
$ rustc parity.rs
$ time cat input.txt | ./parity &> /dev/null
cat input.txt 0.00s user 0.02s system 0% cpu 4.178 total
./parity &> /dev/null 3.87s user 0.32s system 99% cpu 4.195 total
令人惊讶的是——在 Go 中实际上相同的程序执行速度快 4 倍:
$ go build parity.go
$ time cat input.txt | ./parity &> /dev/null
cat input.txt 0.00s user 0.03s system 3% cpu 0.952 total
./parity &> /dev/null 0.63s user 0.32s system 99% cpu 0.955 total
这是 Go 中的代码:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func parity(line string) uint64 {
var parity uint64
u, err := strconv.ParseUint(line, 10, 64)
if err != nil {
panic(err)
}
for u > 0 {
parity ^= u & 1
u >>= 1
}
return parity
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
// skip line with number of cases
if !scanner.Scan() {
// panic if there's no number of test cases
panic("missing number of test cases")
}
for scanner.Scan() {
fmt.Println(parity(scanner.Text()))
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
}
版本:
$ rustc --version
rustc 1.7.0
$ go version
go version go1.6 darwin/amd64
输入文件示例,第一行包含文件中输入值的数量:
8
7727369244898783789
2444477357490019411
4038350233697550492
8106226119927945594
1538904728446207070
0
1
18446744073709551615
为什么我编写的 Rust 和 Go 程序在性能上有如此显着的差异?在这种情况下,我预计 Rust 会比 Go 快一点。我的 Rust 代码有问题吗?
我有一个用 C 编写的多线程合并排序程序,以及一个使用 0、1、2 或 4 个线程对其进行基准测试的程序。我还用 Python 编写了一个程序来进行多项测试并汇总结果。 奇怪的是,当我运行 Pytho
这个问题在这里已经有了答案: Why is my Rust program slower than the equivalent Java program? (1 个回答) 关闭 5 年前。 我用
关于编译为 JavaScript 的语言的开发,我也在考虑以 C++ 为目标,以便在需要时生成更快的程序。我的计划是使用 std::vectors 来保存我的语言的动态数组。重复填充一个大数组将是一个
今天,我正在阅读一些用 FORTRAN 77 编写的非常流行的数值库中的代码,例如 QUADPACK ( last updated in 1987 ),我想知道除了大量的代码之外,是否有任何理由不在
我的 Java 程序目前遇到了一个奇怪的行为: 该程序是一个 JavaFX 桌面应用程序,它使用本地 Selenium 独立服务器打开 Web 应用程序,进行一些输入并下载 Excel 文件。它读取
我为我已经完成并提交的 OS 类作业写了这篇文章。我昨天发布了这个问题,但由于“学术诚信”规定,我在提交截止日期之后才将其取消。 目标是学习如何使用临界区。有一个 data 数组,其中包含 100 个
我查看了 Rust 程序使用了多少 RAM(top 命令的 RES 列),我想知道为什么它们使用这么多内存。 这是一个例子: use std::io; fn main() { println!
我是一名优秀的程序员,十分优秀!