The x32 ABI (see Wikipedia article) is an ABI like i386 (32 bit) or x86-64 (64 bit). One can think of the x32 ABI as a 64 bit ABI with pointers reduced from 64 bit to 32 bit. In code with many pointers or much work for a garbage collector like BDW, this can reduce the memory requirement by 50 % and runtime by 10-20 %. The main disadvantage is that your x32 process is limited to 4 GB of RAM. If this is no problem for your use case, read on to get some real data for different Linux applications. All experiments were run with GCC 11.3.0 (GCC 10.4.0 for the Bigloo experiments below) from Ubuntu 22.10 on a Ryzen 7950X computer.
The famous editor was benchmarked by compiling all .el files to .elc files using the Makefile of Emacs 28.2.
| ABI | run time (s) | relative to x84-64 |
| x86-64 | 270 | 0 % |
| x32 | 255 | -9.4 % |
The experiment was repeated for Emacs 29.1 and GCC 12.1.0 with a similar speed-up of 9.3 % (Ubuntu 22.04).
The experiment was repeated for Emacs 29.2 and GCC 13.2.0 with a larger speed-up of 11.7 % (Ubuntu 23.10).
The Scheme implementation was benchmarked with a semantic parser for natural language processing. It involves lots of symbolic processing, large data structures, and a significant percentage of garbage collection (with the BDW garbage collector).
| ABI | run time (s) | relative to x84-64 |
| i386 | 151.7 | +5.3 % |
| x86-64 | 144.0 | 0 % |
| x32 | 119.3 | -17.2 % |
The differences grow further if RAM pressure grows. For example, using 16 parsers in parallel (on a 16-core Ryzen 9950X, with a compute load of 35 CPU core days) increases the advantage of x32 to 26.9 % (measured with Debian 12 and gcc-16 on 2026-06-20). Together, the 16 processes use around 60 % of the physical RAM of 64 GB (running at 6400 MT/s); hence, this work-load (which is typical and more realistic for my compute-intensive use cases) shows an even larger effect of x32.
| ABI | run time (min) | relative to x84-64 |
| x86-64 | 3146 | 0 % |
| x32 | 2301 | -26.9 % |
The Scheme implementation was benchmarked with the semantic parser for natural language processing as described above.
| ABI | run time (s) | relative to x84-64 |
| i386 | 748 | +16.7 % |
| x86-64 | 641 | 0 % |
| x32 | 544 | -15.1 % |
The 'check' makefile target of the Scheme implementation was also used as a collection of benchmarks. As this comprises compilations and the benchmarks contain many micro benchmarks and corner cases, the results might be somewhat distorted.
| ABI | run time (s) | relative to x84-64 |
| i386 | 188.2 | +13.7 % |
| x86-64 | 165.5 | 0 % |
| x32 | 155.4 | -6.1 % |