How to reduce compiled file size?

前端 未结 12 741
野性不改
野性不改 2020-11-28 20:59

Lets compare c and go: Hello_world.c :

#include
int main(){
    printf(\"Hello world!\");
}

Hello_world.go:

         


        
12条回答
  •  暖寄归人
    2020-11-28 21:32

    create a file named main.go, let's try with simple hello world program.

    package main
    
    import "fmt"
    
    func main(){
        fmt.Println("Hello World!")
    }
    

    I use go version 1.9.1

    $ go version
     go version go1.9.1 linux/amd64
    

    Compile with standard go build command.

    $ go build main.go
    $ ls -lh
    -rwxr-xr-x-x 1 nil nil 1.8M Oct 27 07:47 main
    

    Let's compile once again with go build but with ldflags as suggested above,

    $ go build -ldflags "-s -w" main.go
    $ ls -lh
    -rwxr-xr-x-x 1 nil nil 1.2M Oct 27 08:15 main
    

    File size is reduced by 30%.

    Now, lets use gccgo,

    $ go version
     go version go1.8.1 gccgo (GCC) 7.2.0 linux/amd64
    

    Building go with gccgo,

    $ go build main.go
    $ ls -lh
    -rwxr-xr-x 1 nil nil 34K Oct 27 12:18 main
    

    Binary size is reduced by almost 100%. Let's once again try building our main.go with gccgo but with build flags,

    $ go build -gccgoflags "-s -w" main.go
    -rwxr-xr-x 1 nil nil 23K Oct 27 13:02 main
    

    Warning: As gccgo binaries were dynamically linked. If you have a binary which is very big in size, your binary when compiled with gccgo will not be decreased by 100%, but it will be reduced in size by considerable amount.

    Compared to gc, gccgo is slower to compile code but supports more powerful optimizations, so a CPU-bound program built by gccgo will usually run faster. All the optimizations implemented in GCC over the years are available, including inlining, loop optimizations, vectorization, instruction scheduling, and more. While it does not always produce better code, in some cases programs compiled with gccgo can run 30% faster.

    The GCC 7 releases are expected to include a complete implementation of the Go 1.8 user libraries. As with earlier releases, the Go 1.8 runtime is not fully merged, but that should not be visible to Go programs.

    Pros:

    1. Reduced size
    2. Optimized.

    Cons

    1. Slow
    2. Cannot use the latest version of go.

    You can see over here and here.

提交回复
热议问题