亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 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 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號