boost :: asio :: streambuf 크기는 consume()이 호출 될 때까지 계속 증가합니다.
consume()이 호출 된 후에도 기본 버퍼에 사용 된 메모리가 절대로 릴리스되지 않습니다.
boost :: asio :: streambuf shrink-to-fit?
예 : 다음 코드는 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;
}
이것은 http://stackoverflow.com/questions/9552785/boost-asio-streambuf-dont-release-memory-after-calling-consume과 매우 유사하지만 질문에 대한 긍정적 인 대답을 나타내지는 않습니다. – Steve