メモリ効率、速度効率、またはシンプルさをお探しですか?
非常に単純なプール アロケータをいつでも作成またはダウンロードして、それをアロケータとして適切なデータ構造に渡すことができます。合計サイズが事前にわかっており、ベクターのサイズを変更したり、新しいベクターを追加したりする必要がないため、これは典型的なプール アロケーターよりもさらに簡単です。すべてmalloc
のストレージを 1 つの大きなブロックに格納し、次のブロックへの単一のポインターを保持します。n バイトを割り当てるには、T *ret = nextBlock; nextBlock += n; return ret;
. オブジェクトが取るに足らないものであり、破棄する必要がない場合はfree
、最後に 1 つの大きな処理を行うことさえできます。
これは、必要なデータ構造を使用したり、異なる構造を比較対照したりできることを意味します。vector
のA vector
? vector
セルの巨人に加えてvector
オフセット?クレイジーに聞こえるかもしれませんが、うまくいくかもしれない他の何かを思いつきましたか? メモリ割り当ての側面を気にすることなく、読みやすさ、使いやすさ、およびパフォーマンスを比較できます。
(もちろん、あなたの目標がスピードであるなら、このように詰め込むことは最良の答えではないかもしれません.キャッシュやページの配置を改善するために少しのスペースを無駄にすることで、多くの場合、多くのスピードを得ることができます. 、たとえば、転置された方法でベクトル空間を割り当てて、列優先を行うアルゴリズムのパフォーマンスを向上させますが、その時点では、アロケータよりもアルゴリズムを微調整する方がおそらく簡単です。 )