在Go 中編譯一個簡單的「Hello World」程式時,您可能會驚訝地發現它的可執行文件比預期大得多。這個問題已在 Go FAQ 中解決:「為什麼我的小程式是這麼大的二進位檔案?」
解釋在於 Go 的連結過程。 Go 使用靜態鏈接,這意味著 Go 運行時以及動態類型檢查、反射和恐慌處理所需的所有類型資訊都包含在最終的可執行檔中。這種方法提供了強大的運行時支持,但它是以檔案大小為代價的。
與 Go 到 C 相比,靜態連結的「Hello World」C 程式通常約為 750 kB,包括 printf 實作。相較之下,使用 fmt.Printf 的 Go 等效項由於其廣泛的運行時支援和類型資訊而佔用 1.9 MB。
但是,當您在 Go 程式中新增更多 fmt.Println() 呼叫時,大小保持一致。這是因為所需的程式庫和運行時已包含在可執行檔中。新增文字僅添加最少量的資料。
理解這種行為對於最佳化 Go 執行檔至關重要。雖然 Go 的運行時支援提供了許多便利,但它是以檔案大小為代價的。透過客製化程式碼以僅使用必要的功能,您可以減少可執行檔的膨脹。
以上是為什麼 Go 執行檔比預期大得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!