2010-12-10 4 views
2
async_write(*this, BoostAsio::buffer(pck->_storage), boost::bind(&tcp_socket::handle_wrote, this, pck, BoostAsio::placeholders::error)); 

pckがヒープ上に割り当てられていますが、削除すると_storageも無効になるかasync_writeは内部構造にバッファをコピーし、スタック上で自由に削除/割り当てできますか?async_write - ブースト。それはバッファをコピーしますか?

ありがとうございます。

+0

ソースコードを読んでください。 – jkp

答えて

2

async_write関数はバッファをコピーしません。内部のconst_bufferオブジェクトを深いライブラリ関数に渡します。 const_bufferオブジェクトには、実際のバッファへの内部ポインタが含まれているため、ディープコピーは実行されません。非同期ハンドラが呼び出されるまでpck->storageが有効であることを確認する必要があります。

これは確かに最高です。毎回バッファーをコピーすると、パフォーマンスが大幅に低下します。

+0

intを書くだけならどうですか?ディープコピーは演算子new()を保存することができます。 – jean

0

バッファーまたは少なくとも一部はカーネルのソケットバッファーにコピーされることに注意してください。通常これは大したことではありません。ただし、操作中にアプリケーションのバッファを使用するには、送信バッファをゼロに設定することができます。もちろん、送信バッファを無効にすることの他の結果を理解することなく、そのことを行うべきではありません。

関連する問題