C 分配/取消分配资源
我必须管理一个资源。它基本上是一个唯一的数字,用于标识交换机中的第2层连接。可以有16k个这样的连接,因此每次用户希望配置连接时,他/她都需要分配一个唯一的索引。类似地,当用户希望删除连接时,必须释放该资源(号码),并且该资源必须可用于配置(和标识)其他连接。到目前为止,我正在使用基于无符号字符数组的位图来维护设置/取消设置的位 为了监视16k数字,我使用2048字节的无符号字符数组,其中每个位表示一个资源:C 分配/取消分配资源,c,C,我必须管理一个资源。它基本上是一个唯一的数字,用于标识交换机中的第2层连接。可以有16k个这样的连接,因此每次用户希望配置连接时,他/她都需要分配一个唯一的索引。类似地,当用户希望删除连接时,必须释放该资源(号码),并且该资源必须可用于配置(和标识)其他连接。到目前为止,我正在使用基于无符号字符数组的位图来维护设置/取消设置的位 为了监视16k数字,我使用2048字节的无符号字符数组,其中每个位表示一个资源: unsigned char bitmap_array[2048]; 有没有更好的方法
unsigned char bitmap_array[2048];
有没有更好的方法可以做到这一点,而不涉及如此大量的静态分配?这是嵌入的吗?按桌面标准,2k的内存并没有那么多。您可以始终使用哈希表,但可能无法获得现在的性能。如果让您感觉更好,您还可以动态分配块 我的C可能有点混乱,但如果我记得它应该是这样的:
unsigned char *ptr = (unsigned char *) malloc(2048 * sizeof (unsigned char));
//insert null pointer check here
完成后,请记住呼叫free
说真的,2k的静态分配可能没问题 这是嵌入式的吗?按桌面标准,2k的内存并没有那么多。您可以始终使用哈希表,但可能无法获得现在的性能。如果让您感觉更好,您还可以动态分配块 我的C可能有点混乱,但如果我记得它应该是这样的:
unsigned char *ptr = (unsigned char *) malloc(2048 * sizeof (unsigned char));
//insert null pointer check here
完成后,请记住呼叫free
说真的,2k的静态分配可能没问题 另一种方法是使用集合[Hash/Tree],它的大小将被动态选择。当且仅当分配了此资源时,集合中的每个元素都是 这些解决方案的问题是:
一,。速度会慢一些。
二,。当元素数较高时,它将占用比静态数组更多的内存 对于2k,我坚持使用静态位图数组 还有一种可能性: 使用虚拟内存使用的相同技巧。
将“数组”划分为N个部分,并创建一个大小为N的额外表。
表中的每个元素都将映射到与其相关的数组的一部分。
现在,当分配资源k时,必须分配k所在的数组部分,[并将所有其他值设置为0]。
它仍将比块慢,并且当分配所有主菜时,它将需要额外的N*4字节。
只有当数据比2k大很多时,我才会使用这个解决方案
更多信息:另一种方法是使用集合[Hash/Tree],它的大小将被动态选择。当且仅当分配了此资源时,集合中的每个元素都是 这些解决方案的问题是:
一,。速度会慢一些。
二,。当元素数较高时,它将占用比静态数组更多的内存 对于2k,我坚持使用静态位图数组 还有一种可能性: 使用虚拟内存使用的相同技巧。
将“数组”划分为N个部分,并创建一个大小为N的额外表。
表中的每个元素都将映射到与其相关的数组的一部分。
现在,当分配资源k时,必须分配k所在的数组部分,[并将所有其他值设置为0]。
它仍将比块慢,并且当分配所有主菜时,它将需要额外的N*4字节。
只有当数据比2k大很多时,我才会使用这个解决方案
更多信息:有什么不去的理由吗?您使用的是内存非常有限的平台吗?静态2k似乎没有那么糟糕。您是否存储了与连接相关的任何其他信息?你为什么决定用数字代替指针?有什么理由不这样做吗?您使用的是内存非常有限的平台吗?静态2k似乎没有那么糟糕。您是否存储了与连接相关的任何其他信息?你为什么决定用数字而不是指针?谢谢大家的回答:)谢谢大家的回答:)