- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有几个关于缓冲区和内存池的问题,我想得到解答。
假设我有一个服务器,每秒发送和接收 ~50-100+ 条消息。所有消息都有各种大小。您将如何着手充分利用此处的内存管理?我最初的计划是使用固定大小的缓冲区节点,并将它们合并在一起,例如:
struct buffer{
uint8_t data[512];
uint32_t end;
buffer* next;
}
buffer* b = pool_get_new_buffer();
因此,当发送一条消息时,我会根据大小创建一个或多个缓冲区并将它们链接在一起。这样我就不用担心池中的碎片了。 (或者至少我是这么认为的)。但是在小消息上,这是浪费空间。
但是看的越来越多,上网查代码,好像根本就没有人用这种方法。那么什么是更好的方法呢?根据消息大小从池中分配内存?
编辑:因此,我在此之后可能是对不同方法进行更深入的比较。
如果我使用链式缓冲区方法,我猜我会将碎片保持在最低水平,但另一方面我猜想对链中的每个缓冲区执行 memcpy 也是有代价的。但话又说回来,分配足够大的缓冲区并执行单个 memcpy 肯定也有其缺点,尽管大多数人无论如何都会选择这种方法。
最佳答案
如果只有一个缓冲区,比如大小为 0.5/1MB,怎么样?这显然取决于目标操作系统/设备以及可能的最大消息大小。此外,让您的服务器包含数据包大小。假设您的数据包没有超过单个缓冲区大小,您可以将数据下载到缓冲区中,对其进行处理,然后将内存标记为可用。我已将这种方法用于单个客户端-服务器应用程序。
关于c++ - 内存池和缓冲区 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15724497/
我在一次采访中被问到这个问题,但无法回答。也没有找到任何相关信息。 最佳答案 正如 Docker 文档中所述,Docker 注册表是: [...] a hosted service containin
我目前正在为我的应用程序上的所有用户使用单个 mysql 连接。我想开始使用一个池(它应该更优化,对吧?)但我有一个“结构”问题:createPool 方法只适用于回调,我不明白如何通过与 socke
据我所知,“testOnBorrow”和“validationQuery”参数正合我意,但它们似乎没有按预期工作。 我启动应用程序,运行一些查询,一切正常。然后我重新启动 postgres 服务器 -
我需要解决 Entity Framework 核心中的 Multi-Tenancy 问题。每个租户都有自己的数据库(由于历史原因,无法更改)。 我将按照许多地方的建议使用上下文工厂(example 1
我有两个文件: x.py class BF(object) def __init__(): . . def add(self,z): . . y.py from y
我是一名优秀的程序员,十分优秀!