c语言: #include #include int main(){ clock_t time = clock(); int n = 0; int i; for(i=0; i<1000000000; i++){ n += i; } time = clock()-time; printf("%d %lld\n", n, time/1000); return 0; } java: public class Main{ public static void main(String[] args){ long time = System.currentTimeMillis(); int n = 0; int i; for(i=0; i<1000000000; i++){ n += i; } time = System.currentTimeMillis()-time; System.out.println(n+" "+time); } } 求大神解释?
compiler 针对 java 作了优化?
唉.. gcc没有优化成类似下面的目标代码, 太失望了
Quote: 引用 9 楼 mLee79 的回复: 唉.. gcc没有优化成类似下面的目标代码, 太失望了 可能侦测溢出,所以没优化,long long n,应该0秒杀...
#include #include int main(){ long long n = 0; int i; for(i=0; i<1000000000; i+=8) { n += i + 0; n += i + 1; n += i + 2; n += i + 3; n += i + 4; n += i + 5; n += i + 6; n += i + 7; } printf("%lld %d\n", n , clock() ); return 0; }
可怜那些老鸟都没试,就在那主观意淫,说循环数太大,扯编译器优化。。。,1000000000又没超过int范围 ,JAVA中int也是4字节,8楼才是大神,一语切中要害!!!!!!
for(i=0; i<1000000000; i++) { n += i; }
Quote: 引用 25 楼 bug1190 的回复: 可怜那些老鸟都没试,就在那主观意淫,说循环数太大,扯编译器优化。。。,1000000000又没超过int范围 ,JAVA中int也是4字节,8楼才是大神,一语切中要害!!!!!! 看代码不认真,罚你重看,真的没有溢出? for(i=0; i<1000000000; i++) { n += i; }
有溢出怎么了,有溢出也是n溢出,有溢出JAVA不也照样有溢出吗?不是比执行效率吗,管溢出啥子事, 再说了就算有溢出,溢出了也照加