x32 ABI
x32 ABI(英語:x32 Application Binary Interface)是一種ABI及Linux內核接口之一。它允許程序得到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]。
特性 | 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 Linux和Debian,也有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.0 1.1 Thorsten Leemhuis. Kernel Log: x32 ABI gets around 64-bit drawbacks. www.h-online.com. 2011-09-13 [2011-11-01]. (原始內容存檔於2011-10-28).
- ^ 2.0 2.1 2.2 x32 - a native 32-bit ABI for x86-64. linuxplumbersconf.org. [2012-06-12]. (原始內容存檔於2012-05-05).
- ^ 3.0 3.1 3.2 x32-abi. Google Sites. [2011-11-01]. (原始內容存檔於2011-10-30).
- ^ 181.mcf SPEC CPU2000 Benchmark Description File. Standard Performance Evaluation Corporation. 1999-10-14 [2011-11-01]. (原始內容存檔於2018-09-08).
- ^ H.J. Lu, H Peter Anvin, Milind Girkar. X32 - A Native 32bit ABI For X86-64. September 2011 [2015-02-16]. (原始內容存檔於2017-03-11).
- ^ Tony Bourke. Are 64-bit Binaries Really Slower than 32-bit Binaries?. 2004-01-22 [2014-03-25]. (原始內容存檔於2018-04-16).
- ^ Donald Knuth. Recent News: A Flame About 64-bit Pointers. February 2008 [15 May 2012]. (原始內容存檔於2012-09-26).
- ^ H. Peter Anvin. RFD: x32 ABI system call numbers. 27 August 2011 [15 May 2012]. (原始內容存檔於2012-09-26).
- ^ 9.0 9.1 Jonathan Corbet. The x32 system call ABI. LWN.net. 2011-08-29 [2011-11-01]. (原始內容存檔於2022-05-07).
- ^ 10.0 10.1 Linus Torvalds. Re: RFD: x32 ABI system call numbers. LWN.net. 2011-08-26 [2011-11-01]. (原始內容存檔於2017-12-01).
- ^ H.J. Lu. X32 project status update. 2011-11-24 [2015-02-16]. (原始內容存檔於2015-09-24).