为什么Go会为小程序生成大的二进制文件?

时间:2014-06-09 18:20:41

标签: binary go size

为什么Go编译器会产生大的二进制文件?

例如,在编译下面的代码之后,我得到一个1.8 MB的exec文件

package main
import "fmt"
func main(){
   fmt.Println("Hello World")
}

我在 Ubuntu Win7 上测试了上述代码,结果是一样的!

我还用+70行代码编写了一个更大的程序,结果二进制文件再次出人意料地为1.8 MB(实际上有几个字节差异)。我想知道Go编译器将什么转储到二进制文件中。

1 个答案:

答案 0 :(得分:13)

Why is my trivial program such a large binary?(来自Go Programming Language FAQ):

  

gc工具链(5l,6l和8l)中的连接体进行静态连接。 所有Go二进制文件因此包括Go运行时,以及支持动态类型检查,反射甚至恐慌时间堆栈跟踪所需的运行时类型信息。

     

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