パート XI. アロケーターをセレクターで切り替え

目次

96. アロケータークラス内での複数の割り当て方針を切り替え
96.1. 複数のアロケーターインスタンスを切り替え

アロケーターは多種多様な状況に臨機応変に対応するために、複数の戦略・方針を実装しておき、必要に応じて柔軟に切り替えるのが一般的ですかね。

まあ意味分からないでしょうから、説明しますね。

アロケーター内で割り当ての戦略・方針を複数まず作ります。

具体案としては

あたりでしょうかね。

例としては 64 バイト以下でも全て 64 バイトブロックで割り当てるのが 64 バイト均等ブロックで割り当てるロジックや、65 バイトから 256 バイトまでの割り当てリクエストを 256 バイト均等ブロックで割り当てるロジックが混在しているアロケーターです。

複数のアラインメントサイズのメモリープールを、最適化であったり、ハード仕様に合わせるために作っておくのも便利です。

もしくはアロケーター内のロジック実装ではなく、アロケーター自体のインスタンスを切り替えるという手法もありますね。

 てなことで、さらに以下のように分類できます。

先に断っておくと、名称は全て筆者が独断と偏見に基づいて命名したので、この本の外では一切通じないと思います。

内部セレクトまたは内部セレクターの実装は、クラス内の条件文で記述を加える程度なので一番楽ですが、アロケータークラスに全てを記述するためにクラスが大きくなるため、メンテナンスが煩雑になりがちです。

スタティックセレクトは、異なるパラメーターを持つスタティックインスタンスを作って切り替える手法です。

インスタンスの管理はマネージャークラスで行わないとできないので、コードはシンプルになる傾向があります。

ポリモーフィズムについては C++17 で polymorphic_allocator が導入されているので、そちらで解説したいと思います。

Copyright 2018-2019, by Masaki Komatsu