簡體   English   中英

是否可以刪除此條件語句?

[英]Is it possible to remove this conditional statement?

我正在為一個簡單的游戲編寫求解器,當我分析代碼時,這些行占用了40%的CPU時間(通過針對Release版本運行時通過Visual Studio探查器)。

unsigned int notVisited, move; // initialized outside of this code
bool pathFree = (notVisited & move) == move;
if (pathFree) successors |= move;

我懷疑實際的減速是該行下方的分支,並且進行優化編譯導致其找到錯誤的行。 所有這些都發生在一個循環中,每個函數調用運行大約10次。 是否有一些魔術可以執行上述行而無需分支?

這也許嗎?

successors |= (move & -((int) pathFree));

如果pathFree為false,則(int) pathFree為0,因此整個右側為0,而|=不執行任何操作。

如果pathFree為true,則(int) pathFree為1,取反為-1,因此所有位均為1,因此整個右側求move

我懷疑它會更快。 在這兩種情況下,您最終都要進行一次內存寫操作,如果條件為假,以前可以避免這種情況。

可悲的是,在將編譯器的代碼和建議版本的匯編輸出,其設置及其所有周圍的代碼進行比較之前,此處給出的任何答案對您都沒有任何實際意義。

僅從代碼簡潔性的角度講,我喜歡Pete Becker的評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM