Goにはガベージコレクションがあるのでプログラマがメモリ管理を意識することは少ない。とはいえ無駄にメモリを割り当てまくるとそれだけメモリアロケータとガベージコレクタが走る回数が増えてプログラムが遅くなってしまう。効率の良いプログラムを書こうと思ったらある程度はどういうふうに値がメモリ上に確保されるのか意識することが必要だ。 メモリシステムへの負荷を下げるにはメモリの量だけではなく回数を減らすことが有効である。Goでは構造体のレイアウトは自分で制御できるし、interior pointer(オブジェクトの内部を指しているポインタ)を取得することもできるので、必要な値をまとめてメモリ上に確保することができる。具体的には次のように行う。 type encoder { buf []byte scratch [80]byte // その他のフィールド ... } func newEncoder()