2

自動メモリ管理を処理するために使用してboost::intrusive_ptrいますが、プールされたオブジェクトの割り当てと組み合わせて使用​​したいと考えています。Boost Pool はこれの良い出発点になるでしょうか、それとも「スマート ポインター」を使用したプールされた割り当てのための別の一般的に受け入れられている方法はありますか?

4

1 に答える 1

0

私はあなたが探しているものを正確に書いたと思います:

https://github.com/cdesjardins/QueuePtr

これは基本的にスレッド セーフなキューであり、初期化時にメモリ バッファーが読み込まれます。

boost::shared_ptr<RefCntBufferPool> pool(new RefCntBufferPool(700, 1024));

700 個のバッファーを持つプールへの shared_ptr があり、各バッファーは 1024 バイトです。

次に、バッファを取得できます。

boost::intrusive_ptr<RefCntBuffer> x;
pool->dequeue(x);

好きなことをしてください。いくつかの例を次に示します。

boost::intrusive_ptr<RefCntBuffer> y;
y = x;
y->_buffer = boost::asio::buffer(y->_buffer + 10, 100);
boost::asio::buffer_copy(y->_buffer, boost::asio::buffer("hello"));
x.reset();

バッファが使用されなくなったことを示すために参照カウントが低下すると、バッファは自動的にプールに戻されて再利用できるようになります。使用中。

于 2015-02-14T16:24:29.353 に答える