boost :: asio :: streambufのサイズは、consume()が呼び出されるまで増加し続けます。
消費()が呼び出された後でも、基になるバッファによって使用されているメモリが解放されることはありません。
例:次のコードは、max_sizeを指定せずに最初にstreambufを作成しました。次に、14Mbのデータをstreambufにダンプします。次に、それらすべての14MBのデータを消費します。ポイント2000では、streambuf.size()は0ですが、「top」は、プロセスがまだ14MBのRAMを使用していることを示しています。
max_sizeを指定したくありません。とにかくそれが空になった後にstreambufを縮小することはありますか?
#include <boost/asio.hpp>
#include <iostream>
#include <string>
int main()
{
{
boost::asio::streambuf b;
std::ostream os(&b);
for(int i= 0; i<1000000; ++i)
{
os << "Hello, World!\n";
}
std::cout<<"point 1000"<<std::endl;
std::cout<<"size="<<b.size()<<std::endl;
// at this point, the streambuf's size is close to 14MB.
b.consume(b.size());
std::cout<<"point 2000"<<std::endl;
std::cout<<"size="<<b.size()<<std::endl;
// at this point, the streambuf.size() is 0
// but the streambuf's underlying buffer, which is a vector I assume,
// still hold that 14MB space.
// "top" shows the process size is 14M
}
// at this point, "top" showed the process size shrinks to almost zero
std::cout<<"point 4000"<<std::endl;
return 0;
}