為什麼 VC 不允許 x64 內聯彙編?

Visual C++ 至今都禁止 x64 編譯模式下使用 __asm 關鍵字內聯彙編。

每次要用彙編的時候都得另外開一個 ASM 文件寫,然後 call 過去。

始終不能理解微軟為何要禁止這一特性。


intel c++編譯器 可以自己出IDE來匡扶一下正義的?


首先,內聯彙編,是有必要的。比如測試CPU的新特效、為了屏蔽掉編譯器自身的一些優化、實現一些特殊的功能,等等。

其次,對於題主來說,如果你用的是Intel的CPU,建議你使用Intel自家的編譯器甚至IDE,而且,要注意BIOS上的參數。


你看windows10是全平台什麼的,要是你這樣實在想寫 內嵌 彙編的用戶團結起來的話,讓微軟出一個unified asm讓你們內嵌也不是不可以的,你看,現在的問題就在於你們是不是足夠團結了,皮球滾啊滾,到你腳下了。


因為微軟在也不想讓你們可以輕鬆寫出綁定在一個CPU上面的代碼了。不過反正後門又沒有堵死,開個asm來寫又不會很麻煩。


你要用彙編幹什麼?intrinsic不行?


工作量太大,人力不如拿去做別的更受程序員歡迎。

知不知道寫代碼優化器的看到內聯彙編就會頭大?很多優化和內聯彙編不兼容。x86的是必須向後兼容沒辦法,x64的沒有傳統代碼拖後腿的就可以砍掉了。要寫彙編自己開ASM文件寫去不要放在C++文件里妨礙優化器工作。

作為用戶來說,為了幾句彙編就把優化器提供的優化丟掉是撿了芝麻丟了西瓜。


不覺得需要這麼做,當年寫病毒查殺引擎,寫了特徵碼比對,用了彙編。現在覺得很沒必要。


Intel的編譯器和clang支持x64的內聯彙編編程


推薦閱讀:

什麼語言最適合寫編譯器/解釋器?
vector<vector<int> >中>>之間的空格是否是必須的?
Visual Studio 為何沒有 64 位的版本?
Visual C++ 6以debug模式編譯很拙笨,為何要做無用功?
如何拒絕編譯器將函數內聯處理?

TAG:編程語言 | 編程 | C | VisualC | 編譯器 |