服务器内存管理

时间:2015-03-03 14:15:57

标签: c++ memory-management iocp

我在Windows上开发服务器。我的服务器使用IOCP套接字和数据库。通常情况是用户连接并长时间保持连接。连接用户可以从服务器请求一些数据。通常请求与db访问相关联。客户端请求消息的长度可变。消息是带有google protobuf的数据包,并且在每条消息之前发送固定长度的标头。

我可以做些什么不同的内存管理,而不是使用通常的新/删除功能,可以加快我的服务器?我现在唯一的想法是拥有一个头缓冲池并重用它们,而不是经常分配/解除分配它们。 你怎么看待为每个用户分别建立堆,所以在用户断开连接时我可以一次删除所有用户数据而不是使用十几个删除调用? 关于这个主题的任何提示或技巧都表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:2)

缓冲池是一个好主意,我倾向于有一个"缓冲区分配器"所有连接共享的对象,可以为I / O目的分配固定大小的缓冲区。在连接级别上也可能是一个好主意(即每个套接字都有一个较小的池可供重用),因为这会减少共享分配器上的交叉连接争用。

每个连接一个堆似乎是解决这个问题的重要方法。

我有一些代码可以download from here演示共享缓冲区分配器方法。