x86 vs x64
今天看到某青年的blog轉貼, 那文章寫得真是閻王爺打報告, 鬼話連篇. 現在網上的東西真不能看.
在這里我來寫一點點關于x86和x64的東西。
| i686 : Intel 686 ( Pentium II, Pentium III , Pentim 4, K7 級別CPU ) |
嚴格的說,沒有i786這種東西,一般認為Pentium Pro, P II和PIII是P6,而Pentium 4是超長流水線架構,現在的Intel產品則是Core架構,在ICC中都有對應的編譯選項。不同的架構會影響編譯器的設計,也就是編譯器后端代碼生成部分的策略。針對長短流水線所需要的優化技術顯然是不同的。
| 其實如果你有源代碼,32位系統的源代碼基本上可以直接在 64 位的系統上面編譯成為 64 位架構可運行的軟件(新的技術還是用不上)。 |
這里涉及到一個很復雜的,牽扯面很廣的交叉編譯問題。
1 在64位下,不同廠家的編譯器對數據類型的實際長度有不同的解釋,具體可以參考維基百科
僅僅這個表格就足以說明存在很復雜的交叉編譯問題。更進一步說,對于我們常用的CC++語言,很多人喜歡用int來保存兩個指針的差,甚至寫int i = &j這樣的代碼,這樣的東西在64位下面是難以正確工作的(至少我們不能說可能能用的算法就是正確的算法)。
64位地址帶來的問題是,數學運算結果不能保存在32位長度變量中,如果地址被截斷,那就會變得毫無意義。
2 如果源代碼是精心設計編寫,能夠被交叉編譯到x64系統上,那么x64所引入的體系架構增強會被自然的采用,這主要有兩點:
A:64位巨大的地址空間,可以處理更多的數據
B:對于高級語言來說,編譯器會利用額外的8個通用寄存器R8~~r15來用作函數調用實參傳遞和臨時變量,并且在像Windows這樣的系統上,默認的系統調用約定由stdcall變成了fastcall,優勢不言而喻。
當然,額外的不利情況也會出現:64位的代碼比較大,會對I cache、D cache都造成更大的壓力。簡而言之就是雙刃劍。
轉載于:https://www.cnblogs.com/skogkatt/archive/2010/03/01/4163360.html
總結
以上是生活随笔為你收集整理的x86 vs x64的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts1.3执行流程分析
- 下一篇: excel公式中的$(美元符号)的作用