我試圖確定Visual C++ 2008或2010是否支持loop unswitching compiler optimization。我知道gcc支持它。Visual C++支持循環不切換嗎?
回答
據我所知, 「否」:
可能會因人而異,取決於:
無論你是否有最新的編譯器(2010 MSVS)
是否已購買MSVS Professional或更高版本
所以我只是用VS2010試了一下:
void foo(int* x, int* y, int length, int w) {
for (int i = 0; i < length; i++) {
x[i] = x[i] + y[i];
if (w) {
y[i] = 0;
}
}
}
int main() {
int x[1000];
int y[1000];
int w;
scanf("%d", &w);
foo(x, y, 1000, w);
int sum = 0;
for (int i = 0; i < 1000; i++) {
if (y[i])
sum++;
}
printf("%d\n", sum);
return 0;
}
有點超過必要的複雜,以確保它不會優化功能了。無論如何,這導致以下反彙編:
PUBLIC [email protected]@[email protected] ; foo
; Function compile flags: /Ogtp
; COMDAT [email protected]@[email protected]
_TEXT SEGMENT
[email protected]@[email protected] PROC ; foo, COMDAT
; _x$ = ecx
; _y$ = eax
; _w$ = esi
; Line 12
sub ecx, eax
mov edx, 1000 ; 000003e8H
push edi
[email protected]:
; Line 10
mov edi, DWORD PTR [eax]
add DWORD PTR [ecx+eax], edi
; Line 11
test esi, esi
je SHORT [email protected]
; Line 12
mov DWORD PTR [eax], 0
[email protected]:
; Line 9
add eax, 4
dec edx
jne SHORT [email protected]
pop edi
; Line 15
ret 0
[email protected]@[email protected] ENDP ; foo
編譯爲發佈項目,32位下VS2010 Premium,Win7 x64。
看起來它沒有這樣做,但我在裝配時很生疏,從來沒有像英特爾組裝那麼好。 – hippietrail
對不起,我忘了分析彙編 - 討論移情;)但是,我們有一個循環(總是測試內部的W)。它實際上是'push edi'和'pop edi'之間的代碼,'test esi,esi'是我們測試w爲0的部分(如果跳過下一個mov指令)。 – Voo
請注意,由於根據實際版本討論了不同的優化:這是在VS2010 Premium上運行的。 – Voo
- 1. `sqlite3`支持循環嗎?
- 2. c#切換字體如果不支持
- 3. SBT支持循環依賴嗎?
- 4. XmlSerializer可以支持循環引用嗎?
- 5. MSVC10 Visual Studio 2010是否支持基於C++範圍的循環
- 6. 確實visual C++ 6.0支持unicode嗎?
- 7. F#visual studio環境支持
- 8. While循環的C++切換語句
- 9. Android密碼可見性切換不支持支持庫25?
- 10. 循環範圍:VS 2008不支持它嗎?
- 11. OpenMP不支持循環中斷
- 12. 如何在C/C++中不使用循環切換n次?
- 13. CDT visual C++支持錯誤
- 14. 支持類中的每個循環
- 15. 循環切換語句
- 16. 循環切換語句
- 17. Unobtrusive在循環中切換
- 18. jQuery的循環切換ID
- 19. 在Java中切換循環
- 20. 圖庫切換器(c#visual)
- 21. 將Visual Studio切換到C#?
- 22. 中斷語句不在循環內或在C中切換
- 23. Visual Studio c#數組循環
- 24. Visual C++ infinite while循環
- 25. 不支持linux 3.7.1支持ext2嗎?
- 26. Visual C++與C + + 11和線程支持
- 27. C支持重載嗎?
- 28. GNU Global支持objective-c嗎?
- 29. C支持基礎類嗎?
- 30. C#支持程序嗎?
AFAIK可用的編譯器優化不依賴於您購買的MSVC版本。他們將更多IDE功能添加到更昂貴的版本中。 – Praetorian
我只有免費的Express版本,並認爲與pricier版本的差異將是喜歡IDE的東西而不是編譯器本身。但@ paulsm4:[似乎是正確的!](http://msdn.microsoft.com/en-us/library/aa271022(VS.60).aspx) – hippietrail
@hippietrail:請注意,您已鏈接的頁面適用到VC++ 6.0(大約1998年的編譯器)。 –