【发布时间】:2012-02-16 08:43:13
【问题描述】:
我需要将大量 unsigned chars 和/或 ints(可能 100,000,000 及以上)存储在一个数组中。这个数组中的数字会经常进行数学运算,所以数组会经常修改,数组的长度也可能会经常变化。
我可以使用 C 或 Objective-C(或两者)。性能方面,最好使用纯 C 数组并根据需要使用 realloc,还是只使用 NSMutableArray?或者有没有人有更好的想法?
请注意性能是我最关心的问题,如有必要我愿意编写大量的重新分配代码。
另外:内存使用是一个考虑因素,但不是问题(只要它最终不会使用多个 GB)。
【问题讨论】:
-
重新分配代码不需要很长:
int *data = 0; size_t size = 0, capacity = 0;设置一个空数组(当然也可以使用结构)。然后保证一定的容量:if (capacity < required_capacity) { size_t new_capacity = max(capacity*2, required_capacity); int *tmp = realloc(data, new_capacity*sizeof(*data)); if (!tmp) { handle error; } else { data = tmp; capacity = new_capacity; }。有些人更喜欢使用capacity*3/2,或其他一些2 的平方根的近似值,而不是加倍容量。无论哪种方式,我都省略了对环绕的基本检查。
标签: objective-c c arrays performance