gpt4 book ai didi

go - Go 编译可执行文件巨大的原因

转载 作者:IT老高 更新时间:2023-10-28 12:58:03 34 4
gpt4 key购买 nike

我编写了一个 hello world Go 程序,它在我的 linux 机器上生成了 native 可执行文件。但是看到这个简单的 Hello world Go 程序的大小,我感到很惊讶,竟然只有 1.9MB!

为什么这么简单的 Go 程序的可执行文件会这么大?

最佳答案

这个确切的问题出现在官方常见问题解答中:Why is my trivial program such a large binary?

引用答案:

The linkers in the gc tool chain (5l, 6l, and 8l) do static linking. All Go binaries therefore include the Go run-time, along with the run-time type information necessary to support dynamic type checks, reflection, and even panic-time stack traces.

A simple C "hello, world" program compiled and linked statically using gcc on Linux is around 750 kB, including an implementation of printf. An equivalent Go program using fmt.Printf is around 1.9 MB, but that includes more powerful run-time support and type information.

因此,您的 Hello World 的 native 可执行文件为 1.9 MB,因为它包含一个运行时,该运行时提供垃圾收集、反射和许多其他功能(您的程序可能不会真正使用这些功能,但它就在那里)。以及用于打印 "Hello World" 文本(以及它的依赖项)的 fmt 包的实现。

现在尝试以下操作:在您的程序中添加另一行 fmt.Println("Hello World! Again") 并再次编译。结果不会是 2x 1.9MB,但仍然只有 1.9 MB!是的,因为所有使用的库(fmt 及其依赖项)和运行时都已添加到可执行文件中(因此将添加更多字节以打印您刚刚添加的第二个文本) .

关于go - Go 编译可执行文件巨大的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28576173/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com