c语言for循环与C#for循环性能对比

张国富 2014-05-24 03:30:47
C语言代码

int i=0;
for(i=0;i<999000000;++i){
}

运行时间花了2秒多一点


            
for (int i = 0; i < 999000000; i++)
{
}

运行时间花了354毫秒左右。
本人预测C语言会比C#的for循环快。怎么会相反呢?而且还远不如C#的for循环。
这是为什么,忘各位大师指点迷津

...全文
5829 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
puler 2016-06-09
  • 打赏
  • 举报
回复
C跟C++,在描述多维字符数组的时候,是个非常痛苦的事情
hhddzz 2016-06-09
  • 打赏
  • 举报
回复
不熟悉就别瞎测,浪费精力时间。一个最简单的for循环,能翻出什么花样,什么语言都差不多。 至于C 2秒,绝对是debug配置+调试器附加。C/C++附加调试器后对速度的影响非常大。以前在javaeye还是开源中国有一个帖子,也是一眼就看出来是附加了调试器的东西,那帮人还撕接近十页。 你这个代码,release配置、不附加调试器,C++运行时间绝对是0。别说你一个空循环,就算是循环内有代码,只要最后用不上,照样给你砍了。
  • 打赏
  • 举报
回复
如果说到计算本身,基于虚拟机的计算在优化上确实占有优势,例如可以根据CPU的不同而临时产生不同的代码。但是它一般来说都进行了复杂的“防溢出、数据保护”代码。 其实在个别语句上没有什么可比性。如果要比较,应该也不会差出多少。
  • 打赏
  • 举报
回复
我们都是对比大的数据处理,没有纠结过个别语句的对比。
homesos 2016-06-08
  • 打赏
  • 举报
回复
把汇编代码拉出来一对比不就O了
Main- 2016-06-08
  • 打赏
  • 举报
回复
应该是一样快的吧
qq_22334159 2014-11-18
  • 打赏
  • 举报
回复
我也想知道结果.
  • 打赏
  • 举报
回复
专家呢 看看专家怎么说
  • 打赏
  • 举报
回复
坐等专业解答。。。
bigbaldy 2014-06-05
  • 打赏
  • 举报
回复
关于纯数字运算,C和C#性能完全一样,我做过专门的测试
syeerzy 2014-06-05
  • 打赏
  • 举报
回复
引用 5 楼 bwangel 的回复:
[quote=引用 1 楼 iyomumx 的回复:] 因为JIT做过一次循环后发现什么也没做,于是机智的跳过后面的循环直接给i赋值了 没开优化的C编译器还是老实巴交的慢慢数 不开优化就是耍流氓
编译器有如此聪明?[/quote] 其实比这个更聪明得多, 比如i < 999000000 这个判断, 因为i一开始远小于这个数字,所以实际上还会跳掉很多次判断....
threenewbee 2014-05-24
  • 打赏
  • 举报
回复
for (int i = 0; i < 999000000; i++) { i=i+i % 10;i=i-i%10; } 这样就优化不了了,再比较 理论上C#和C++一样快。
iyomumx 2014-05-24
  • 打赏
  • 举报
回复
引用 5 楼 bwangel 的回复:
[quote=引用 1 楼 iyomumx 的回复:] 因为JIT做过一次循环后发现什么也没做,于是机智的跳过后面的循环直接给i赋值了 没开优化的C编译器还是老实巴交的慢慢数 不开优化就是耍流氓
编译器有如此聪明?[/quote] 这只是打个比方,现代的编译器把空循环优化掉是很普遍的行为
bwangel 2014-05-24
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx 的回复:
因为JIT做过一次循环后发现什么也没做,于是机智的跳过后面的循环直接给i赋值了 没开优化的C编译器还是老实巴交的慢慢数 不开优化就是耍流氓
编译器有如此聪明?
iyomumx 2014-05-24
  • 打赏
  • 举报
回复
我的意思是,JIT会进行优化
w511016910 2014-05-24
  • 打赏
  • 举报
回复
C语言的时间算法跟C#的不一样啦。这样肯定是对比不了的。
张国富 2014-05-24
  • 打赏
  • 举报
回复
可是我这样改了,运行时间还是毫秒
 
DateTime d = DateTime.Now;
int total = 0;
for (int i = 0; i < 999000000; i++)
{
total += i;
}
double dou= (DateTime.Now - d).TotalMilliseconds;
MessageBox.Show(dou.ToString());
iyomumx 2014-05-24
  • 打赏
  • 举报
回复
因为JIT做过一次循环后发现什么也没做,于是机智的跳过后面的循环直接给i赋值了 没开优化的C编译器还是老实巴交的慢慢数 不开优化就是耍流氓

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧