我偶然發現了兩個等價增量語法之間的奇怪的持續時間差異。C++ - 有和沒有if語句的奇怪時間測量
if(seed != state) ++i;
這個符號測量每個迭代1048576
i += (seed != state);
2.25毫秒,每1048576次迭代這個2.80毫秒。
不應該第二個符號比第一個符號快一點? 這是要提到的是,種子==狀態很少發生(在2^32-1次之一)。
感謝您的回答。
編輯: 我用gcc C編譯器測試了同樣的東西,其中第一個比第二個稍快,但第二個與C++編譯器的速度相同。
您是否使用優化版本進行了測量?那將是令人驚訝的。 – 2015-02-10 22:40:53
這是沒有足夠的時間在操作系統下進行可靠的測量。運行幾次,你可能會得到不同的結果。讓它以十億次迭代運行,差異可能會消失。如果沒有,你如何編譯這個?具體而言,是否進行優化?我希望優化編譯器能夠爲此生成完全相同的代碼,但可能並非沒有優化。 – Wintermute 2015-02-10 22:40:59
它以10億次迭代運行,但結果除以1000以獲得100萬次運行的平均值。即使使用-O3,第一個也會慢一點。 – bakkaa 2015-02-10 22:59:13