Visual C++ >> GUI >> MFC
Unroll for、while
unroll關鍵字會把for、while指令展開,它的意思就是原本可能需要執行10次的迴圈,變成只執行5次,範例如下程式碼
原始程式
int test(unsigned int n) { int bits = 0; while(n != 0){ if(n & 1){ bits++; } n>>= 1; } return bits; }
unroll後的程式
int test_unroll(unsigned int n) { int bits = 0; while(n != 0){ if(n & 1){ bits++; } if(n & 2){ bits++; } if(n & 4){ bits++; } if(n & 8){ bits++; } n>>= 4; } return bits; }
看完以上程式就可以知道展開的意思了,編譯器如果有支援unroll指令時,將會使用#pragma unroll(n)指令去定義unroll的深度,說到這個,司徒心有所感說一下話,當有人看到unroll的程式片段時,第一時間有人會說:你到底會不會寫程式呢?當然也可能有另一種人會說:做得好,你把效能加快了,這兩種人是完全不一樣的見解,一般第一種人就是沒寫過最佳化或者單晶片微處理機的人,而第二種人可能是寫過最佳化和單晶片微處理機的人,你要當哪一種人呢?還是建議各位,保有謙虛學習的心態,因為,天外有天,人外有人