为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Go 的构建速度比 Rust 更快?

为什么 Go 的构建速度比 Rust 更快?

Go
SMILET 2022-09-26 20:04:18
我正在练习在哥兰和锈的leedcode写作解决方案。我为这个问题写了一个解决方案,https://leetcode.com/problems/letter-combinations-of-a-phone-number/ 在戈兰和生锈package mainfunc letterCombinations(digits string) []string {    if len(digits) == 0 {        return []string{}    }    letters := [][]string{        {},        {},        {"a", "b", "c"},        {"d", "e", "f"},        {"g", "h", "i"},        {"j", "k", "l"},        {"m", "n", "o"},        {"p", "q", "r", "s"},        {"t", "u", "v"},        {"w", "x", "y", "z"},    }    var gen func(index int, digits string) []string    gen = func(index int, digits string) []string {        result := make([]string, 0)        row := letters[int(digits[index]-'0')]        index++        for _, letter := range row {            if index < len(digits) {                for _, res := range gen(index, digits) {                    result = append(result, letter+res)                }            } else {                result = append(result, letter)            }        }        return result    }    return gen(0, digits)}func main() {    for i := 0; i < 10000; i++ {        letterCombinations("23456789")    }}这生锈了struct Solution;impl Solution {    pub fn letter_combinations(digits: String) -> Vec<String> {        if digits.len() == 0 {            return vec![];        }        let letters: [[char; 5]; 10] = [            [0 as char, '0', '0', '0', '0'],            [0 as char, '0', '0', '0', '0'],            [3 as char, 'a', 'b', 'c', '0'], // 2            [3 as char, 'd', 'e', 'f', '0'], // 3            [3 as char, 'g', 'h', 'i', '0'], // 4            [3 as char, 'j', 'k', 'l', '0'], // 5            [3 as char, 'm', 'n', 'o', '0'], // 6            [4 as char, 'p', 'q', 'r', 's'], // 7            [3 as char, 't', 'u', 'v', '0'], // 8            [4 as char, 'w', 'x', 'y', 'z'], // 9        ];我通过10 000次迭代运行每个解决方案。Golang解决方案在我的笔记本电脑上需要60秒。生锈溶液需要556秒,大约慢10倍。我猜这是因为golang垃圾回收器不会在程序期间将堆内存返回给操作系统,而是在每次迭代中使用预先分配的内存。但是,每次调用函数字母组合()都会从操作系统中分配内存并将其释放回去。所以生锈速度较慢。我说的对吗?
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

正如其他地方所指出的(例如,为什么我的 Rust 程序比等效的 Java 程序慢?),如果你在调试模式下编译 Rust 代码,它往往会很慢。如果打开优化,它往往会快得多。

这里值得一提的是,如果你让Rust编译器(或告诉他们)进行大量的优化。货物构建系统将在发布模式下运行时执行此操作。这种优化可能会使调试变得非常困难!因此,如果您尝试使代码正常工作,您可能还不想这样做。

Go编译器传统上只做相对简单的优化。1 因此,当前没有优化级别或标志,除了 -N 用于禁用优化和 -l 用于禁用内联go build


1这种优化并非毫无用处,但它不是那种在高优化级别上执行的超级花哨的“在调试器中遵循你的代码”的不可能的优化。rustc


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号