我有一些关于我想要回答的缓冲区和内存池的问题.
假设我有一台服务器,发送和接收~50-100 + msg /秒.所有消息都有各种尺寸.你会如何在这里充分利用内存管理?我最初的计划是使用固定大小的缓冲节点,并将它们集中在一起,例如:
struct buffer{
uint8_t data[512];
uint32_t end;
buffer* next;
}
buffer* b = pool_get_new_buffer();
Run Code Online (Sandbox Code Playgroud)
因此,当发送msg时,我会根据大小创建一个或多个缓冲区并将它们链接在一起.这样我就不会害怕它自己的池中的碎片.(或者至少我认为).但在小型消息上,它浪费了空间.
但是阅读越来越多,并在互联网上查看代码,看起来根本没有人使用这种方法.那么什么是更好的方法呢?根据msg大小从池中分配内存?
编辑:那么在这之后我可能会对不同的方法进行更加深思熟虑的比较.
如果我使用链式缓冲区方法即时猜测我会将碎片保持在最低位置,但另一方面我猜想为链中的每个缓冲区执行memcpy也需要付出代价.但话说回来,分配足够大的缓冲区并执行单个memcpy也必须有其缺点,即使大多数人仍然选择这种方法.