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

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

在一臺計算機上編譯 Go 代碼并在另一臺計算機上運行它是否會降低程序的性能?

在一臺計算機上編譯 Go 代碼并在另一臺計算機上運行它是否會降低程序的性能?

Go
精慕HU 2022-09-26 15:13:17
如果我在Mac上編譯Go程序(顯然,針對Linux架構)并將其推送到Linux服務器運行,是否會有任何性能損失?我在某處讀到Go編譯器針對正在編譯的特定硬件優化二進制文件,例如用于多線程的CPU內核數等?是真的嗎?在一臺計算機上編譯 Go 代碼并在另一臺計算機上運行它(不會降低性能)是否安全?
查看完整描述

2 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

在一臺計算機上編譯 Go 代碼并在另一臺計算機上運行它是否會降低程序的性能?

不。

您的問題表明,當面向同一平臺時,不同的系統可以從同一來源構建不同的二進制文件,但它們沒有。默認情況下,Go構建是可重現的,即針對同一平臺(由GOOS和GOARCH指定),構建軟件包時將始終產生完全相同的二進制文件,無論您在哪里構建它。這對于能夠斷言給定的二進制文件實際上是從給定的源生成的非常重要的。

雖然有可能打破這種保證(例如,通過使用編譯器參數等在二進制文件中故意包含時間戳),但這不會影響任何可測量數量的執行速度。-ldflags '-X main.timestamp=${DATE}'


查看完整回答
反對 回復 2022-09-26
?
繁華開滿天機

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編譯的機器代碼相比,這種微調的確切價值是值得懷疑的,因為它取決于太多的東西,只能通過基準測試來比較和對比。

斷續器

就您而言,請放心:交叉編譯沒有任何區別。


查看完整回答
反對 回復 2022-09-26
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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