0

我有 200 个组。每组有 100 台设备,即总共 20000 台设备分为 200 组,每组 100 台。

现在,当每个设备都向服务器注册时,服务器会为该设备分配一个组 ID。(100 个设备具有相同的组 id。)在稍后阶段,服务器发送具有组 id 的多播数据,以便将数据接收到具有该组 id 的所有设备。

问题是我需要为每个组分配一块内存(比如 25 字节)来存储数据,以便该组中的所有设备都将使用该块进行处理。我的想法是分配一个大块(比如 25 * 200 = 5000 字节)并为每个组分配一个 25 字节的块(grp0 指向起始地址,grp1 指向起始+25 地址,依此类推)。

这是最好的方法吗?还有其他想法吗?

4

2 回答 2

1

对于您的示例,我将使用一个数组。

如果您的客户数量不变,分配单个块是最有效的方法:

  • 你做了一个 malloc 调用而不是 100
  • 您避免了与跟踪每个内存块分配的列表相关的开销
  • 您的数据保存在一块中,这使得它更容易被处理器缓存缓存,而 100 个小块放置在上帝知道的位置

说,可能只有 100 个元素的差异可以忽略不计,但乘以 200 个组可以给你带来性能提升(真的取决于你如何使用数据结构)

如果使用动态结构(例如,您的客户端连接和断开连接,因此它们并不总是 100 个),您应该使用链表 - 它在需要时分配内存(因此您最终会得到 100 个不同的内存块)

于 2012-11-08T11:43:41.483 回答
0

正如 ArjunShankar 所说,您将花费 O(1) 时间来访问组内的设备,假设您不必处理太多即可找到特定设备(假设您必须找到它),这还不错。如果您打算同时处理它们并且数量变大(或者您的可用内存有限),您应该看看一些技术,例如磁盘分页。

于 2012-11-08T11:43:30.127 回答