测试这个特性,我采用了一个更大的生产环境程序,jujud,其体积从94MB减小为67MB。
地址无关的二进制文件可以减小50%。在地址无关的可执行程序(PIE)中,在只读数据段的指针需要动态重映射。因为新的类型信息格式通过段偏移单元代替了了指针,这样,每个指针节省了28个字节。
移除调试信息的地址无关的可执行程序对于移动开发者很重要,因为这是发布到手机端的程序。因为下载大体积的应用程序的用户体验差,所以体积减少对他们来说是个好消息。
未来的工作
一些运行时类型信息的改变没有赶上Go1.7版本冻结,但是希望会在1.8版本加入。这些会进一步减小程序体积,尤其是对地址无关的程序。
这些改变都是保守的,减小二进制文件的体积不会增加编译时间、启动时间、整体的运行时间以及内存使用量。我们会进行更彻底的做法来减小二进制文件的体积:upx工具可以把二进制文件的体积进一步压缩50%,代价是增加启动时间和潜在的内存使用量。针对非常小的系统(可能在钥匙挂上),我们会编译一个没有反射的Go,虽然还不确定这样一个有限制的语言是否是非常有用。在运行时中,当计算每个kb字节时,我们会使用稍微慢点但是更紧凑的算法。所有的这些需要在后续的开发周期中做更多的调研。
Read full article from Go1.7让二进制文件变得更小(翻译)
No comments:
Post a Comment