2 回答

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

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