我需要在数组中存储大量unsigned char
和/或int
s(可能为100,000,000及以上)。通常会对此数组中的数字执行数学运算,因此数组将经常被修改,并且数组的长度也可能经常发生变化。
我可以使用C或Objective-C(或两者)。性能方面,如果需要使用普通C数组和realloc
,或者只是去NSMutableArray
会更好吗?或者有没有人有更好的想法?
请注意表现是我的主要关注点,如果有必要,我愿意编写大量的重新分配代码。
另外:内存使用是一个考虑因素,但不是问题(只要它不会使用多个千兆字节)。
答案 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的数据样本 - 像素,音频块或类似的东西,第一个是好的。在大多数其他情况下,第二种方式绝对是首选。