为了账号安全,请及时绑定邮箱和手机立即绑定

Go 编译后的可执行文件很大的原因

Go 编译后的可执行文件很大的原因

Go
猛跑小猪 2021-09-13 19:36:47
我编译了一个 hello world Go 程序,它在我的 linux 机器上生成了本机可执行文件。但是我很惊讶地看到简单的 Hello world Go 程序的大小,它是 1.9MB !为什么这么简单的Go程序的可执行文件那么大?
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

这个确切的问题出现在官方常见问题解答中:为什么我的小程序是这么大的二进制文件?

引用答案:

在GC工具链(连接体5l6l8l)做静态链接。因此,所有 Go 二进制文件都包含 Go 运行时,以及支持动态类型检查、反射甚至恐慌时堆栈跟踪所需的运行时类型信息。

在 Linux 上使用 gcc 静态编译和链接的简单 C“hello, world”程序大约 750 kB,包括printf. 使用的等效 Go 程序fmt.Printf大约为 1.9 MB,但这包括更强大的运行时支持和类型信息。

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

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


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信