X32 ABI

x32 ABI（）是一种ABI及Linux内核接口之一。它允许程序得到x86-64的优点（较大的CPU寄存器号码，更佳的浮点性能，更快的地址无关代码共享库，通过寄存器传递函数参数，更快的系统调用指令），而使用32位指针，从而避免了对64位指针的开销。

 细节 
尽管x32 ABI限制了程序的虚拟地址为4 GB，它也减小了程序的内存占用量，且在某些情况下，能使它运行得更快。在181.mcf SPEC CPU 2000基准测试中，x32 ABI版本比x86-64版本最多能快40%。一般而言，x32在SPEC CPU整数基准比x86-64快5-8%。在SPEC CPU浮点基准上，x86-64则毫无速度优势。

+ ABI比较 特性 i386 x32 x86-64 进程最大内存 colspan="2"   整数寄存器  colspan="2"  浮点寄存器  colspan="2"  指针 colspan="2"   64位元运算  colspan="2"  浮点数  colspan="2"  调用约定  colspan="2"  PIC序言  colspan="2" 

 历史 
大多数情况下执行以ILP32模式编译的程序，但又能使用主要的64位CPU指令，这样的用户空间并非少见，特别是在“经典RISC”芯片领域中。例如，Solaris操作系统在SPARC和x86-64上就是这么做的。而对于Linux，SPARC和PowerPC上的Linux发行版，如Aurora SPARC Linux和Debian，也有ILP32用户空间。根本原因是LP64代码“更贵”，正如上文x86-64所述。就这方面而言，x32是“64位ILP32”概念在x86-64平台的延伸。

自从2003年Athlon 64发布以来，一些人就在讨论32位指针x86-64 ABI的好处，特别是2008年高德纳的研究。然而，在实现这种模式上，外界并没有看到有显著进展，直至2011年8月27日，汉斯·彼得·昂万在Linux内核邮件列表上宣布，他和H·J·鲁一直在x32-ABI上努力。

就在同一天，林纳斯·托瓦兹回应道，在x32 ABI中使用32位时间值，将来可能会导致问题。这是因为，使用32位时间值，将导致时间值在2038年溢出。根据这一要求，x32 ABI的开发者将时间值变为了64位。

2011年9月7日一个Linux Plumbers Conference上的演讲提及了x32 ABI。

x32 ABI于Linux 3.4起合并入内核，GNU C 函式庫 2.16中添加了相应支持。

参考

外部链接
 X32 ABI开发网站 
 Linux Plumbers Conference上的X32 ABI演示幻灯片 

Category:Linux内核接口
Category:X86架構