パート IX. スタック領域に割り当てるアロケーター

目次

88. 配列内のアドレスの走査
88.1. スタックアロケーター(可変長のリクエストサイズに対応、難易度高いのでスキップ推奨)
89. ヒープへのフォールバック付きスタックアロケーター
90. コードをシンプルにする(内部バッファーのアドレスかのチェック)

 筆者がカスタムアロケーターを作る場合、スタック領域にオブジェクトのアドレスを割り当てたいというのが多かったと思います。

 おそらく読者さんも同じなんじゃないかと思います。

 その理由は速度です。

 スタック領域で割り当てるよりも、ヒープ領域のほうが色々な意味で遅いのは良く知られていますからね。

 それでスタックアロケーターを作る際に実装する必要があるのが以下の 2 つです。

 これ以外にも少なからず考えたい点はありますが、スタックとヒープの割り当てに本質的な差異は、開発者が定義したメモリープールを保持するという点につきます。

 プレースメント new はオブジェクトの構成時に使います。

 さらに作っておくとより良いものは以下の 3 つです。

 ヒープへのフォールバックを作るには、定義した内部バッファー内のアドレスと、ヒープに割り当てたアドレスを区別してやる必要があります。

 メモリープールについてはお勉強として一つで完結しても良いのですが、少し実用的なものの場合は、ランタイムでどのスタック領域を使うかを選択できるようにするとよりナイスですね。

 std::unique_ptr との連携はデリーターを用意するだけです。

Copyright 2018-2019, by Masaki Komatsu