【发布时间】:2014-01-14 08:46:00
【问题描述】:
我目前正在编写 MMO 服务器。 而且我现在为传入的数据包分配了动态内存(首先读取 8 字节标头,然后为正文分配内存并在数据包 API 类中读取正文)。 但是我听说动态内存分配很慢。 现在,我应该继续使用动态内存分配(我使用 boost asio 异步执行读/写操作)还是应该将其转换为固定大小? 我的模型中使用的最大数据包大小是 5824 字节,我不认为使用具有该值的静态缓冲区会很好。 谢谢。
【问题讨论】:
-
从堆中分配每个数据包会很慢。从内存中分配一个大块,然后在每个数据包中分发它的碎片会更快。
-
5824 对于堆栈分配的数组应该没问题。此外,您已标记此
c++,您可能应该使用std::vector、std::array和朋友。 -
您的计算机和互联网连接哪个更快?我建议先对其进行分析,然后应用任何必要的更改来提高性能。
-
我建议你自学如何测试它慢的理论,并验证它是否慢。也就是说,SmartHeap、JEMalloc 和 Google-Perftools 这样的分配器存在是有原因的。
-
许多高性能、多线程、面向网络的服务器出于可移植性考虑而避免使用系统分配器。并非所有系统分配器都是平等的,有些只是在繁忙的多线程环境中表现不佳,主要是因为它们的资源位于简单的互斥锁/解锁之后。当然,同样大部分的问题通常是,我写得不好的代码,分配和释放就像没有明天将所有争用放在分配器上一样。
标签: c++ memory memory-management boost-asio