为什么NSArray访问速度更快,没有优化(-O0),然后使用(-O1,-O2,-O3,-Os,-Ofast)?

时间:2014-02-27 03:45:04

标签: objective-c performance cocoa nsmutablearray nsarray

抽象

使用-O0,我的测试中NSArray的平均访问时间最快。我的测试代码访问数组中每个长度为0到10000的数组中的每个元素。

每个数组的循环:

start = mach_absolute_time();
for (string in array){}
arrayDur = mach_absolute_time() - start;

每个元素的访问时间:

  • -O0~7ns
  • -O1~12ns
  • -O2~12ns
  • -O3~12ns
  • -Os~12ns
  • -Ofast~12ns

图形:

不同长度数组的平均访问时间

Blue = -O0, Red = -Ofast

其中blue是-O0,red是-Ofast,x轴是数组中的元素,y轴是ns访问元素的平均时间。

问题:

积极优化(-Ofast)应该比没有优化(-O0)更快或更快但是对于NSArray来说,这表明优化实际上减慢了访问时间。为什么会这样,这怎么可能被认为是一种优化?

1 个答案:

答案 0 :(得分:2)

将manecosta的评论转化为答案:

虽然您的帖子非常具体,但我认为您会发现NSArray会根据其中包含的元素数量在内部优化自身。

ridiculous fish.com blog上查看这篇精彩文章,观察NSArray的一些奇怪之处

博客文章中的一个要点是:

  

所以看起来CFArray看起来正在切换大约30,000个元素的数据结构实现。我相信,对于较小的数组和不可变的数组,我还没有发现更多的实现。