這個問題要從兩個方面來說,一層是軟件本身,另一層是IDE(包括編譯器、優化器、鏈接器等),下面分別說明。
先說軟件本身的影響,有些程序自身會受操作系統的影響,比如一些多線程程序或者是需要申請資源的程序,因為資源的有限性,每次申請時會存在排隊現象,就導致每次執行的速度不一樣;還有一些程序會受外界環境的影響,比如程序中存在一些隨機過程,某部分代碼運行次數是一個隨機數,這樣也會導致每次運行速度不一樣。以上兩種情況,即使是同樣的IDE生成可執行程序,每次的運行速度也不一樣。見下圖的線程調度過程。
還有一種是IDE的影響,這個要從編譯過程說起,見下圖:
每個現代編譯器都會有一個優化器,會在生成最終的可執行文件之前對程序進行優化。即使使用同一個IDE編譯同樣的程序,不同的優化等級生成的應用程序運行速度也會不一樣。此外,因為每種IDE(更準確地說是編譯器)的優化算法都不太一樣,所以不同的IDE,即使使用同樣的優化等級,生成的應用程序運行速度也會不一樣。下圖是VS中的代碼優化選項:
還有一種情況是程序中使用了庫文件,因為同樣的庫,在不同的IDE中實現細節是有差別的,這種情況也有可能造成運行速度不一樣。
總之,程序的運行速度受操作系統、IDE、引用庫文件、外部環境等多種因素的影響,它們組合起來就會導致即使同樣的代碼也會運行速度不一致。但是一般來說,可以通過觀察程序多次的運行情況,然后根據平均值來比較,對于同樣的硬件平臺,只要差別不超過10%(和物理學中的誤差類似),就可以認為兩個的速度是一致的。