与c相比,转二进制大小

nik*_*oss -1 c binary compilation go

昨天我只想比较简单的golang HelloWorld应用程序和c,go二进制文件就像2-3 MB(只是fmt.Println)等效的c代码,然而,只有大约20 kb(printf).然后我检查了二进制文件正在进行的系统调用,使用strace; 两者之间没有太大的区别所以你是否知道为什么golang二进制文件与c等价物相比如此庞大?

jos*_*hlf 6

默认情况下,Go二进制文件是静态链接的,并且还包含更多信息,例如有关允许反射的类型的信息,类型断言等.引用Go常见问题解答:

默认情况下,gc工具链中的链接器会创建静态链接的二进制文件.因此,所有Go二进制文件都包括Go运行时,以及支持动态类型检查,反射甚至恐慌时间堆栈跟踪所需的运行时类型信息.

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

  • 并且文档不会比go1.7更新,后者将该程序编译为大约1.4M(如果用`-w`和`-s`链接,则为~100) (2认同)