看板 C_and_CPP 關於我們 聯絡資訊
來個隨便的測試 2.Process returned 0 (0x0) execution time : 3.969 s int m = 100000, n = 100000, index = 0, i ,j; for(i=0;i<m*n;i++) { index++; } 1.Process returned 0 (0x0) execution time : 26.813 s for(i=0;i<m;i++) for(j=0;j<n;j++) { index++; } case 2 比 case 1 快6.75倍。 不過用哪種?看程式規模和代碼是不是「熱點」來決定,如果規模小,又 不是熱點段落。這種事就別計較了。 ※ 引述《genghiskii (SaoAn)》之銘言: : 大家好 小弟我有些觀念不是很清楚想請教大家 : 1. : for(i=0;i<m;i++) : for(j=0;j<n;j++) : { : //do something : } : 2. : for(i=0;i<m*n;i++) : { : //do something : } : 有個同學跟我說2跑的會比1快,請問這是為什麼呢? 不是都是跑了m*n次? : 另外還有個類似的問題 : 3. : for(i=0;i<m;i++) : for(j=0;j<n;j++) : { : array_2D[i][j]=some operation; : } : 4. : for(i=0;i<m;i++) : for(j=0;j<n;j++) : { : array_1D[i*m+j]=some operation; : } : 那個同學又跟我說4比3快,但是大小一樣,只有2D跟1D的差別,請問他說的是對的嗎? : 我原以為速度上1=2, 3=4, 但是被他這麼一說我有點被搞混了 : 煩請各位解答 謝謝 -- 不要問我從哪來,我只是一個浪跡天涯的工程師.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.20.160 ※ 編輯: MasterChang 來自: 118.232.20.160 (10/24 12:49)
stupid0319:不是我要吐糟,10000*10000不會爆了int嗎 10/24 13:00
stupid0319:10000*10000=0x2540BE400=爆掉=0x540BE400=1410065408 10/24 13:02
stupid0319:10000000000/1410065408=7.09 10/24 13:05
stupid0319:最上面推文是100000*100000太多0了都會打錯XD 10/24 13:06
VictorTom:爆了就爆了啊, 只是要測迴圈效率不是嗎?? 除非overflow 10/24 13:14
VictorTom:造成loop condition改變, 或者因為register state改變會 10/24 13:14
VictorTom:影響效率(應該沒有這種事吧??) 另外, 不確定這個測試是 10/24 13:15
VictorTom:用release開了opt跑的, 還是debug沒開opt跑的@_@" 10/24 13:15
jimmycool:有差吧,上面那個只會跑1410065407次 10/24 13:19
jimmycool:1410065408次,抱歉XD 10/24 13:19
akasan:一樓的重點在於 m*n 就爆掉了XD 10/24 13:20
fjm31714:i事實上不會跑到那麼大? 10/24 13:22
VictorTom:糟, 看了a大的推文才看懂s大的點....Orz 10/24 13:24
M9665566:計算機概論 XD 10/24 13:24
VictorTom:本來以為在說index會爆Orz 10/24 13:24
M9665566:int 是 4 byte 且 有號數,範圍:-1*2^31 ~ 2^31-1 10/24 13:26