“C很快,Java很慢”,对吧?
我在MacBook Pro Quadcore上比较了Video2Brain的Objectiv-C 3.0教程中的 a) Eclipse / Java和 b) XCode / Objectiv-C的时间表示例。结果绝对让我感到惊讶。 Java比Objective-C实现快3倍。 Java:0.718s与Objective-C相比:2.416s。
问题:我错过了什么?怎么解释这个?谢谢!
a)Java代码:
public static void main(String[] args) {
int timesTable[][] = new int[10][10];
long beginTime = System.currentTimeMillis();
// 10 000 000 x
for (int count = 0; count < 10000000; count++) {
for (int row = 0; row < 10; row++) {
for (int col = 0; col < 10; col++) {
timesTable[row][col] = (row +1) * (col +1);
}
}
}
long endTime = System.currentTimeMillis();
System.out.println("Time elapsed = " + (endTime - beginTime) + "ms");
}
b)Objective-C代码
int main(int argc, char* argv[]) {
int timesTable[10][10];
CFAbsoluteTime beginTime = CFAbsoluteTimeGetCurrent();
// 10 000 000 x
for (int count = 0; count < 10000000; count++) {
for (int row = 0; row < 10; row++) {
for (int col = 0; col < 10; col++) {
timesTable[row][col] = (row +1) * (col +1);
}
}
}
CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();
NSLog(@"Time elapsed = %f", endTime - beginTime);
}
更新
@nhahtdh编译器选项:编译器:Apple LLVM编译器4.2
@jlordo:当我改为timesTable [row] [column] =(row +1)*(column +1)* count
时,我得到相同的结果@uchuugaka:是的,我同意它与Java相比基本上是C语言。我两次都进行了五次测试。系统重新启动。没有其他应用程序在运行。
@Anoop Vaidya:是的,最新版本,我得到相同的时间,没有不同的LLVM GCC 4.2或Apple LLVM编译器4.2UPDATE2
@justin:谢谢,问题解决了。构建设置 - &gt;优化级别
答案 0 :(得分:10)
你的“基准”存在缺陷。 C优化器(用于ObjC测试)应该意识到可以移除整个循环。应在启用优化的情况下执行速度比较(例如-O3
)。在启用优化的情况下运行测试时,上述程序所用的时间为0.0秒(是的,我测试并确认了)。
必须设计出更好的基准。
答案 1 :(得分:5)