- 你真的需要自己检查一下。我的猜测是发出的代码存在差异,但它可能取决于编译器和编译器选项,当然也可能取决于
array
.
- 几乎从来没有,假设
array.count
与“一些工作”相比,评估几乎总是微不足道的。但是,测量它的方法是使用分析器(或等效的)并观察程序运行时的哪一部分花费在该代码行上。如果分析器是准确的,那是您希望通过更改它获得的最大收益。
假设array.count
某些东西真的很慢,你碰巧知道总是会返回相同的结果,但编译器不知道。那么可能值得手动提升它。strlen
被用作一个例子。在实践中实际上strlen
有多慢是有争议的,但易于制造的示例可能运行得比他们需要的慢:
char some_function(char a) {
return (a * 2 + 1) & 0x3F;
}
for (int i = 0; i < strlen(ptr); ++i) {
ptr[i] = some_function(ptr[i]); // faster than strlen for long enough strings.
}
你我都知道它some_function
永远不会返回 0,因此字符串的长度永远不会改变。编译器可能看不到 的定义some_function
,即使看到定义也可能没有意识到它的非零返回性很重要。