2012/10/11

書き方ひとつで巨大な定数を抱えちゃう

実行ファイルのサイズが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 件のコメント:

コメントを投稿