消息接收时内存使用量不断增长

时间:2014-01-03 11:13:17

标签: c++ memory boost-asio

我正在使用库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但我只是用它来进行内存泄漏检查)

0 个答案:

没有答案