最好的内存分配

时间:2012-11-08 11:24:32

标签: c logic analytical

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

如果您的客户端数量没有变化,分配单个块是最有效的方式:

  • 您执行单个malloc调用而不是100
  • 您可以避免与将跟踪每个内存块分配的列表相关联的开销
  • 您的数据保存在一个部分中,这使得处理器缓存更容易缓存,相比之下,100个小块放置了神知道的地方

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

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

答案 1 :(得分:0)

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

相关问题