タグ

2019年2月5日のブックマーク (1件)

  • zero memory allocation slice filtering

    func FilterFoo(arr []string) []string { b := []string{} for _, e := range arr { if IsFoo(e) { b = append(b, e) } } return b } 簡単なベンチマークを書くとわかるように、この関数は返値となるスライスの長さ+1回のメモリアロケーションを行います。一般に、メモリアロケーションの回数は少ない方がパフォーマンスがよく、可能ならばアロケーション回数0を目指したいものです。 今回の場合、次のように書くとメモリアロケーション回数0回の関数を書くことができます。 追記 b := arr[:0]とすると、基底配列に影響が出るので一概に比較できない、とご指摘を受けました。実際に使用する際は副作用に注意しましょう。 このやりかたって引数に副作用あるので、わかってないで使うと危ないような…ht

    zero memory allocation slice filtering
    zetamatta
    zetamatta 2019/02/05
    a[:0] という形式のメモリブロックの要素ゼロ化によるあローケーション回数節約術。既存ブロックをそのまま利用するので、上書き注意な