从NSArray检索是否显示缓存局部性?

时间:2016-04-10 19:46:25

标签: ios objective-c arrays caching

当循环通过普通的C阵列时,CPU会智能地从RAM中抓取周围的单元并将它们粘贴在CPU缓存中。 CPU知道如果你抓住索引6,你很快就会需要索引7。 Objective-C NSArrays是否也出现locality of reference

for (id item in array) {
  NSLog(@"%@", item);
}

for (NSUInteger i = 0; i < array.count; i++) {
  NSLog(@"%@", array[i];
}

在Apple以外工作的人员没有NSArray的内部实施。但是,可以猜测NSMutableArray很可能是用链表实现的,因为它有从任何索引切片数组的方法。如果我们假设NSArray由与NSMutableArray相同的数据存储支持,那么所有NSArray都不会显示引用的位置。

我问的原因是我通过将高度存储在缓存中来优化UITableViewCell高度计算。缓存比NSMutableArray更容易实现为NSMutableDictionary,因此我不必处理数组中的间隙(这是不允许的)。如果NSArray提供了引用的位置,那么我会切换到NSArray以获得额外的性能并承受这种额外的复杂性。

0 个答案:

没有答案