為什麼 VC 不允許 x64 內聯彙編?
01-04
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模式編譯很拙笨,為何要做無用功?
※如何拒絕編譯器將函數內聯處理?