x32 ABI

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋

x32 ABITemplate:Langx)是一種ABILinux核心介面之一。它允許程式得到x86-64的優點(較大的CPU暫存器號碼,更佳的浮點效能,更快的位址無關代碼共享庫,通過暫存器傳遞函式參數,更快的系統呼叫指令),而使用32位元指標,從而避免了對64位元指標的開銷。[1][2][3]

細節[編輯]

儘管x32 ABI限制了程式的虛擬位址為4 GB,它也減小了程式的主記憶體占用量,且在某些情況下,能使它執行得更快[1][2][3]。在181.mcf SPEC CPU 2000基準測試中,x32 ABI版本比x86-64版本最多能快40%[3][4]。一般而言,x32在SPEC CPU整數基準比x86-64快5-8%。在SPEC CPU浮點基準上,x86-64則毫無速度優勢[5]

ABI比較
特性 i386 x32 x86-64
行程最大主記憶體 4 GiB 128 TiB
整數暫存器 6 (PIC) 16
浮點暫存器 8 16
指標 4位元 8位元
64位元運算
浮點數 x87 SSE
呼叫約定 主記憶體 暫存器
PIC序言 2-3 insn

歷史[編輯]

大多數情況下執行以ILP32模式編譯的程式,但又能使用主要的64位元CPU指令,這樣的使用者空間並非少見,特別是在「經典RISC」晶片領域中。例如,Solaris作業系統SPARC和x86-64上就是這麼做的。而對於Linux,SPARC和PowerPC上的Linux發行版,如Aurora SPARC LinuxDebian,也有ILP32使用者空間。根本原因是LP64代碼「更貴」[6],正如上文x86-64所述。就這方面而言,x32是「64位元ILP32」概念在x86-64平台的延伸。

自從2003年Athlon 64發布以來,一些人就在討論32位元指標x86-64 ABI的好處,特別是2008年高德納的研究[7]。然而,在實現這種模式上,外界並沒有看到有顯著進展,直至2011年8月27日,漢斯·彼得·昂萬在Linux核心郵寄清單上宣布,他和H·J·魯一直在x32-ABI上努力[8]

就在同一天,林納斯·托瓦茲回應道,在x32 ABI中使用32位元時間值,將來可能會導致問題[9][10]。這是因為,使用32位元時間值,將導致時間值2038年溢位[9][10]。根據這一要求,x32 ABI的開發者將時間值變為了64位元[11]

2011年9月7日一個Linux Plumbers Conference上的演講提及了x32 ABI[2]

x32 ABI於Linux 3.4起合併入核心,GNU C 函式庫 2.16中添加了相應支援。

參考[編輯]

  1. 1.0 1.1 package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  2. 2.0 2.1 2.2 package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  3. 3.0 3.1 3.2 package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  4. package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  5. package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  6. package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  7. package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  8. package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  9. 9.0 9.1 package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  10. 10.0 10.1 package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found
  11. package.lua第80行Lua錯誤:module 'Module:Citation/CS1/People' not found

外部連結[編輯]

package.lua第80行Lua錯誤:module 'Module:Navbar/configuration' not found