Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分配/取消分配资源_C - Fatal编程技术网

C 分配/取消分配资源

C 分配/取消分配资源,c,C,我必须管理一个资源。它基本上是一个唯一的数字,用于标识交换机中的第2层连接。可以有16k个这样的连接,因此每次用户希望配置连接时,他/她都需要分配一个唯一的索引。类似地,当用户希望删除连接时,必须释放该资源(号码),并且该资源必须可用于配置(和标识)其他连接。到目前为止,我正在使用基于无符号字符数组的位图来维护设置/取消设置的位 为了监视16k数字,我使用2048字节的无符号字符数组,其中每个位表示一个资源: unsigned char bitmap_array[2048]; 有没有更好的方法

我必须管理一个资源。它基本上是一个唯一的数字,用于标识交换机中的第2层连接。可以有16k个这样的连接,因此每次用户希望配置连接时,他/她都需要分配一个唯一的索引。类似地,当用户希望删除连接时,必须释放该资源(号码),并且该资源必须可用于配置(和标识)其他连接。到目前为止,我正在使用基于无符号字符数组的位图来维护设置/取消设置的位

为了监视16k数字,我使用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似乎没有那么糟糕。您是否存储了与连接相关的任何其他信息?你为什么决定用数字而不是指针?谢谢大家的回答:)谢谢大家的回答:)