2 回答

TA貢獻1876條經驗 獲得超7個贊
在一臺計算機上編譯 Go 代碼并在另一臺計算機上運行它是否會降低程序的性能?
不。
您的問題表明,當面向同一平臺時,不同的系統可以從同一來源構建不同的二進制文件,但它們沒有。默認情況下,Go構建是可重現的,即針對同一平臺(由GOOS和GOARCH指定),構建軟件包時將始終產生完全相同的二進制文件,無論您在哪里構建它。這對于能夠斷言給定的二進制文件實際上是從給定的源生成的非常重要的。
雖然有可能打破這種保證(例如,通過使用編譯器參數等在二進制文件中故意包含時間戳),但這不會影響任何可測量數量的執行速度。-ldflags '-X main.timestamp=${DATE}'

TA貢獻1816條經驗 獲得超4個贊
在一臺計算機上編譯 Go 代碼并在另一臺計算機上運行它(不會降低性能)是否安全?
是的。不會出現性能下降。
<...> Go 編譯器針對編譯它的特定硬件優化二進制文件,例如用于多線程處理的 CPU 內核數等?是真的嗎?
不,它不是(截至2021-08-13),但請繼續閱讀一些注意事項。
我們討論中的“問題”是假定的默認值。
問題是,“Go”是由其規范(及其內存模型)定義的編程語言,任何能夠解析根據規范編寫的文本文件并以遵循內存模型的方式執行其定義的Go程序的實現,根據定義,都是“可以運行Go程序”。
如您所見,Go 可能有很多實現 — 包括用 Go 編寫的 Go 解釋器(例如,搜索“八重”和“monkey-go”)。
不過,我認為,可以安全地假設你指的是Go的“股票”,“默認”實現,它是由Go核心團隊(和許多志愿者)開發的,可以從這里獲得。
該特定實現提供所謂的提前 (AOT) 編譯,并且它包含的編譯器目前不會導出任何生成時控件來影響機器代碼生成。它也不考慮構建過程發生的本地系統的細節 - 例如其CPU模型和CPU上的H / W線程數。
但請注意一個有趣的轉折:自從一段時間以來,股票Go實現將wasm
作為其目標架構之一,并且WASM代碼(通常)在VM上運行,該VM可以實現實時(JIT)編譯,該編譯能夠在運行時微調編譯的代碼(通過分析然后重新編譯放置在熱路徑上的代碼)。
與AOT編譯的機器代碼相比,這種微調的確切價值是值得懷疑的,因為它取決于太多的東西,只能通過基準測試來比較和對比。
斷續器
就您而言,請放心:交叉編譯沒有任何區別。
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報