使用-O0,我的测试中NSArray的平均访问时间最快。我的测试代码访问数组中每个长度为0到10000的数组中的每个元素。
start = mach_absolute_time();
for (string in array){}
arrayDur = mach_absolute_time() - start;
不同长度数组的平均访问时间
其中blue是-O0,red是-Ofast,x轴是数组中的元素,y轴是ns访问元素的平均时间。
积极优化(-Ofast)应该比没有优化(-O0)更快或更快但是对于NSArray来说,这表明优化实际上减慢了访问时间。为什么会这样,这怎么可能被认为是一种优化?
答案 0 :(得分:2)
将manecosta的评论转化为答案:
虽然您的帖子非常具体,但我认为您会发现NSArray会根据其中包含的元素数量在内部优化自身。
在ridiculous fish.com blog上查看这篇精彩文章,观察NSArray的一些奇怪之处
博客文章中的一个要点是:
所以看起来CFArray看起来正在切换大约30,000个元素的数据结构实现。我相信,对于较小的数组和不可变的数组,我还没有发现更多的实现。