我正在使用库boost.asio
来创建服务器应用程序。
一切看起来都不错但是当我尝试对它进行一些测试时,我发现当它收到消息时内存使用量正在增长。
#include <boost/asio.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <thread>
#include <chrono>
using boost::asio::ip::tcp;
int main(int argc, char **argv){
// IOService :
boost::asio::io_service ios;
tcp::acceptor acceptor(ios, tcp::endpoint(tcp::v4(), 9000));
tcp::socket s(ios);
acceptor.accept(s);
while(true){
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Some rest for the CPU
int available = s.available();
if(!available) // If there are no bytes available we jump to the next iteration
continue;
std::vector<char> buffer(s.available());
boost::system::error_code ec;
boost::asio::read(s, boost::asio::buffer(buffer), boost::asio::transfer_all(), ec);
if(!ec){
std::string s(buffer.begin(), buffer.end());
std::cout << s << std::endl;
}
}
return 0;
}
[编辑2]:
// Buffer outside the loop:
//No sleep
Start : 188K
Max :12112K
End :8620K
//Sleep 500ms
Start : 188K
Max : 12048k
End : 12048k
//Sleep 100ms
Start : 192K
Max : 12060k
End : 6524k
//Buffer inside the loop
// No sleep
Start : 188K
Max : 11936K
End : 2128k
//Sleep 100ms
Start : 188k
Max : 11936k
End : 584k
//Sleep 500ms
Start : 188k
Max : 11932k
End : 1112k
感谢。
[编辑]如果你有linux下的任何好工具来测量内存使用情况会很好(我知道valgrind
但我只是用它来进行内存泄漏检查)