nik*_*oss -1 c binary compilation go
昨天我只想比较简单的golang HelloWorld应用程序和c,go二进制文件就像2-3 MB(只是fmt.Println)等效的c代码,然而,只有大约20 kb(printf).然后我检查了二进制文件正在进行的系统调用,使用strace; 两者之间没有太大的区别所以你是否知道为什么golang二进制文件与c等价物相比如此庞大?
默认情况下,Go二进制文件是静态链接的,并且还包含更多信息,例如有关允许反射的类型的信息,类型断言等.引用Go常见问题解答:
默认情况下,gc工具链中的链接器会创建静态链接的二进制文件.因此,所有Go二进制文件都包括Go运行时,以及支持动态类型检查,反射甚至恐慌时间堆栈跟踪所需的运行时类型信息.
在Linux上使用gcc静态编译和链接的简单C"hello,world"程序大约为750 kB,包括printf的实现.使用fmt.Printf的等效Go程序大约为2.3 MB,但包括更强大的运行时支持和类型信息.