英文:
why is the Go compiled version is relatively huge?
问题
最近我安装了Go并尝试了hello world的例子。
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
> $ go build hello.go
返回一个1.2Mb大小的hello二进制文件。相对于一个简单的hello world程序来说,这个文件大小相对较大。是否有特定的原因导致文件大小较大?是因为导入了"fmt"吗?
英文:
I recently installed go and was trying out hello world example.
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
> $ go build hello.go
returns hello binary file which is 1.2Mb size. Thats comparatively huge for just a hello world program. Any particular reason on why is the file size large ? Is it because of importing "fmt" ?
答案1
得分: 5
这是一个Go FAQ
为什么我的简单程序会生成如此大的二进制文件?
gc工具链中的链接器(5l、6l和8l)进行静态链接。
所以所有的Go二进制文件都包含了Go运行时,以及支持动态类型检查、反射甚至panic时的堆栈跟踪所需的运行时类型信息。在Linux上,使用gcc编译和静态链接的一个简单的C“hello, world”程序大约为750 kB,其中包括了printf的实现。
使用fmt.Printf的等效的Go程序大约为1.2 MB,但它包含了更强大的运行时支持。
英文:
This is a Go FAQ
Why is my trivial program such a large binary?
> The linkers in the gc tool chain (5l, 6l, and 8l) do static linking.
> All Go binaries therefore include the Go run-time, along with the
> run-time type information necessary to support dynamic type checks,
> reflection, and even panic-time stack traces.
>
> A simple C "hello, world" program compiled and linked statically using
> gcc on Linux is around 750 kB, including an implementation of printf.
> An equivalent Go program using fmt.Printf is around 1.2 MB, but that
> includes more powerful run-time support.
答案2
得分: 1
是的,“fmt”包是其中一个原因。它还会导入其他包。但即使不使用“fmt”,整个运行时也会静态链接到Go二进制文件中。而Go的运行时并不简单 - 它包括调度器/ goroutine与操作系统线程管理器,分割堆栈分配器,垃圾收集器和垃圾收集器友好的内存分配器,也是C线程友好的,信号处理程序和堆栈跟踪生成器,...
英文:
Yes, package "fmt" is one of the reasons. It also in turn imports other packages. But even without using "fmt", there's the whole runtime statically linked into a Go binary. And Go's runtime is not a simple one - it includes for instance a scheduler/goroutine vs OS thread manager, split stack allocator, the garbage collector and garbage collector friendly memory allocator which is also C threads friendly, signal handlers and stack trace generator, ...
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论