看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: 不知道哪裡有問題,運算的時間都一樣,不管fo迴圈跑多少次r 開發平台: (Dev-C++, Windows) 有問題的code: #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { int begin,end,sum=0; register int i,j; printf("測試結果:\n"); begin=clock(); for(i=0;i<10000;i++) for(j=0;j<10000;j++) sum=sum+1; end=clock(); printf("執行函式花了%g秒\n",(end-begin)/CLK_TCK); system("pause"); return 0; } 可以麻煩各位幫我看一下,哪裡有錯嗎? 謝謝你們 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.204.22
joefaq:release mode 迴圈應該會被移除喔 05/10 22:19
VictorTom:推1F, 另外, 改用QueryPerformanceCounter試試:) 05/10 22:24
VictorTom:不然最後再加一個dummy的code去印一下sum; 雖然說迴圈那 05/10 22:25
loveme00835:請問一下迴圈為什麼會被移掉呢? 05/10 22:26
VictorTom:段還是可能被optimize掉, 那就只好換sum+=rand();之類XD 05/10 22:26
VictorTom:迴圈在算sum, sum後面卻沒用到, index i j也都沒用到, 05/10 22:27
VictorTom:整段迴圈都可以被dead code remove掉:) 05/10 22:27
loveme00835:原來最佳化會做成這種程度@@ 05/10 22:29
iversonjimmy:慘了...我有點聽不懂耶 @@ 05/10 22:33
VictorTom:對了, 先改用 %f 印 (double)(end-begin)/CLK_TCK 試試. 05/10 22:37
VictorTom:不行就查查看 QueryPerformanceCounter() 05/10 22:38
VictorTom:簡單說, 值都一樣有幾種可能, 1. 跑太快了一值算出0. 05/10 22:38
VictorTom:2. 差異太小clock()計不到這麼精確; 3. 算出來都是同樣 05/10 22:39
VictorTom:的整數的情況, 就是計算誤差, 即上面說改%f那行.... 05/10 22:39
outshaker:begin end 資料型別要用t_time,為long。 05/10 22:52
james732:因為你的程式裡,那個迴圈對其他部份可說沒有影響 05/10 22:55
james732:最佳化的時候會發現這段程式碼沒有意義 因此省掉 05/10 22:55
loveme00835:嗯嗯,原本以為只會對array index跟計算上做最佳化而已 05/10 22:58
james732:現在的compiler已經做到很恐怖的地步了...XD 05/10 23:00
VictorTom:推可以做的可多了呢XD 05/10 23:01
iversonjimmy:哈哈,謝謝樓上高手們的解答,compiler太過於強大... 05/10 23:13
james732:請記得這種時間相關的,不要用迴圈來做 05/10 23:14
james732:利用OS所提供的函式(如推文的QueryPerformanceCounter) 05/10 23:14
iversonjimmy:QueryPerformanceCounter它是用在C嗎?還是C++ ?? 05/10 23:43
iversonjimmy:我剛剛有稍微查一下,怎好像都關於C++的... 05/10 23:44
VictorTom:它是Win32 API, #include <windows.h> 可用; 使用上也沒 05/10 23:51
VictorTom:有哪邊有需要C++ OO或獨特語法的部份.... 05/10 23:51
iversonjimmy:的確沒有oo的語法,可能是我過去沒碰過吧,抱歉... 05/11 02:44