哪种类型的数组用于大量数字?

时间:2012-02-16 08:43:13

标签: objective-c c arrays performance

我需要在数组中存储大量unsigned char和/或int s(可能为100,000,000及以上)。通常会对此数组中的数字执行数学运算,因此数组将经常被修改,并且数组的长度也可能经常发生变化。

我可以使用C或Objective-C(或两者)。性能方面,如果需要使用普通C数组和realloc,或者只是去NSMutableArray会更好吗?或者有没有人有更好的想法?

请注意表现是我的主要关注点,如果有必要,我愿意编写大量的重新分配代码。

另外:内存使用是一个考虑因素,但不是问题(只要它不会使用多个千兆字节)。

3 个答案:

答案 0 :(得分:2)

使用NSMutableArray表示每次要获取或设置数组元素的值时,都会有两个Objective-C消息的开销。 (一个消息将元素作为对象,第二个消息将其值作为基元int。)消息发送比直接数组访问慢得多。

您可以使用CFMutableArray而不是NSMutableArray,并指定允许存储裸号而不是对象的回调。但是你仍然需要使用函数调用来获取或设置每个数组值。

如果您需要最佳性能,只需使用普通C数组,或者如果您想使用Objective-C ++,则使用std::vector

答案 1 :(得分:0)

您的阵列是否需要增长多少? 使用realloc效率不高。

这就是我推荐链接列表的原因,因为您可以在glib中找到GSList

答案 2 :(得分:0)

容器: C ++怎么样? Objective-C ++和STL可能是一个观点,STL是由聪明人制作的,它在熟练的手中实际上非常有效。虽然,在任何情况下,可能有多达100,000,000个条目需要一些优化技巧。

框架: 你还没有指定任务本身,它是否适合使用像CoreData或者SQLite这样的东西?可以使用SQL过程完成数学运算。

如果你有一些mmm的数据样本 - 像素,音频块或类似的东西,第一个是好的。在大多数其他情况下,第二种方式绝对是首选。