我必须管理资源。它基本上是唯一的号码,用于标识交换机中的第2层连接。可以有16k这样的连接,因此每次用户希望配置连接时,他/她需要分配唯一索引。类似地,当用户希望删除连接时,必须释放资源(号码)并且必须可用于配置(和识别)其他连接。截至目前,我正在使用基于unsigned char数组的位图来维护设置/取消设置的位
监视16k数字我正在使用2048字节的unsigned char数组,其中每个位代表一个资源:
unsigned char bitmap_array[2048];
有没有更好的方法来做同样的事情,这不涉及如此大量的静态分配?
答案 0 :(得分:1)
另一种方法可能是使用Set [Hash / Tree],其大小将被动态选择。当且仅当分配了此资源时,每个元素都在集合中。
这些解决方案的问题是:
1。它会慢一些。
2。当元素数量很高时,静态数组将占用更多内存。
对于2k,我会坚持使用静态位图数组。
还有一种可能性:
使用相同的技巧虚拟内存使用(pages)。
将你的'数组'分成N个部分,并创建一个大小为N的额外表。
表中的每个元素都将映射到与其相关的数组的一部分。
现在,当您分配资源k时,您将必须分配k所在的数组部分,[并将所有其他值设置为0]。
它仍然比块大,并且当分配所有主菜时,它将需要额外的N * 4字节。
只有当数据大于2k时才使用此解决方案。
答案 1 :(得分:0)
这是嵌入式的吗? 2k并不是桌面标准的内存。你总是可以使用哈希表,但是你可能不会得到你现在获得的性能。如果它让你感觉更好,你也可以动态分配块。
我的C可能有点乱,但如果我记得它应该是这样的:
unsigned char *ptr = (unsigned char *) malloc(2048 * sizeof (unsigned char));
//insert null pointer check here
请记得在完成后致电free
......
说真的,2k的静态分配可能没问题。