【问题标题】:why is the Go compiled version is relatively huge? [duplicate]为什么 Go 编译的版本比较庞大? [复制]
【发布时间】:2013-03-11 03:35:51
【问题描述】:

我最近安装了 go 并尝试了 hello world 示例。

package main
import "fmt"
func main() {
    fmt.Printf("hello, world\n")
}

$ go build hello.go

返回 1.2Mb 大小的 hello 二进制文件。这对于一个 hello world 程序来说是相当大的。关于为什么文件大小很大的任何特殊原因?是因为导入了“fmt”吗?

【问题讨论】:

  • 它静态编译所有未剥离的依赖项。想象一下部署的便利性!

标签: compilation go


【解决方案1】:

这是a Go FAQ

为什么我的小程序是这么大的二进制文件?

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

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

【讨论】:

    【解决方案2】:

    是的,包“fmt”是原因之一。它还反过来导入其他包。但即使不使用“fmt”,整个运行时也会静态链接到 Go 二进制文件中。 Go 的运行时并不是一个简单的运行时——它包括例如调度程序/goroutine 与 OS 线程管理器、拆分堆栈分配器、垃圾收集器和垃圾收集器友好的内存分配器(也是 C 线程友好的)、信号处理程序和堆栈跟踪生成器。 ..

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多