実行ファイルのサイズが50MB!?
Why is this binary so large?より。
現象を起こすためだけのもっと小さいコードを書いてみた。
package main
const (
lbaSize = 512
bufSize = lbaSize * 100000
)
func main() {
mem := [bufSize]byte{}
mem[0] = 0
}
をコンパイルすると、実行ファイルのサイズが50MBを超える。
改善方法
以下のように直すと、260KB程度でおさまる。
package main
const (
lbaSize = 512
bufSize = lbaSize * 100000
)
func main() {
var mem [bufSize]byte
mem[0] = 0
}
ポイントは、定数か変数か。
ポイントは、
[bufSize]byte{}
と書くと定数として実行ファイル上に確保する。var mem [bufSize]byte
と書くと動的にメモリを作成する。
これは知っておくべきイディオムだ。
0 件のコメント:
コメントを投稿