ここでは、「プール」と「バッファ」という用語を同じ意味で使用できます。
常に呼び出すとは限らないため、プログラムの開始時に割り当てたいプールがあるとしますnew
。
ここで、プールのサイズを人為的に制限したくはありませんが、より大きなプールを再割り当てすると、古いプールへのすべてのポインターが無効になります。これは確かにあまりクールではありません。
私が考えた1つの方法は、別名「ページング」でした
const int NUM_PAGES = 5;
char* pool[NUM_PAGES];
また、1 ページだけを再割り当てするのではなく、新しいページを割り当てます。これにより、すべてのポインターが有効なままになりますが、ページ プールの管理が少し難しくなります。また、私はページ数を制限しているので、最終的にはプールのサイズについても同様です。
別の方法は、割り当て関数が返すポインタから実メモリ空間へのポインタへのマッピングを行うことでした。これにより、すべての古いポインターが有効なままになりますが、より多くのメモリが必要になり、マッピングを行う割り当て関数から戻るスマート ポインターを作成する必要があります。
私が望むものを達成するために他にどのような方法がありますか? 上記の実装例で見逃した (欠点) 利点は何ですか?