gpt4 book ai didi

go - 为什么执行数组反转的 Rust 程序比等效的 Go 程序慢?

转载 作者:IT王子 更新时间:2023-10-29 02:27:06 24 4
gpt4 key购买 nike

<分区>

我正在初始化一个数组,然后多次反转它以查看性能。

我想知道我是否编写了无法比较的代码,或者 Rust 真的很糟糕以至于花了这么多时间吗?

这是 Rust 的构建和计时过程:

rustc main.rs
time ./main

这会一直运行下去。这是令人惊讶的

使用rust

fn reverse(mylist: &mut Vec<u16>) {
let length = mylist.len();

let mid_length = length / 2;

for number in 0..mid_length {
let mut a = mylist[number];
let mut b = mylist[length - number - 1];

mylist[number] = b;

mylist[length - number - 1] = a;
}
}

fn main() {
let array_size = 100000;

let iterations = 100000;

let mut v = vec![0u16; array_size];

for _ in 0..iterations {
reverse(&mut v);
}
}

开始

Go 代码与上面的 Rust 代码完全相同。需要注意的重要一点是 Go 有垃圾收集,而 Rust 没有。令人惊讶的是,Go 在不到 6 秒的时间内完成了这项工作:

go build main.go
time ./main 100000 100000

real 0m5.932s
user 0m5.928s
sys 0m0.004s

开始

package main

import (
"os"
"strconv"
)

func reverse(mylist []int) []int {

length := len(mylist)
half := int(length / 2)

for i := 0; i < half; i++ {

mylist[i], mylist[length-i-1] = mylist[length-i-1], mylist[i]

}

return mylist

}

func main() {

array_size, _ := strconv.Atoi(os.Args[1])
iterations, _ := strconv.Atoi(os.Args[2])

mylist := make([]int, array_size)

for i := 0; i < iterations; i++ {
reverse(mylist)

}

}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com