Набор инструкций x86-64 добавляет больше регистров и других улучшений, чтобы упростить выполнение исполняемого кода. Однако во многих приложениях увеличенный размер указателя является бременем. Дополнительные неиспользуемые байты в каждом указателе забивают кеш и могут даже переполнять ОЗУ. GCC, например, строит флаг -m32
, и я предполагаю, что это причина.
Можно загрузить 32-битное значение и обработать его как указатель. Это не требует дополнительных инструкций, просто загрузите/вычислите 32 бита и загрузите их из результирующего адреса. Однако трюк не будет переносимым, поскольку платформы имеют разные карты памяти. В Mac OS X зарезервировано всего 4 ГБ адресного пространства. Тем не менее, для одной из программ, которые я написал, хакерство добавляя 0x100000000L
к 32-разрядным "адресам", прежде чем использовать улучшенную производительность по сравнению с истинными 64-разрядными адресами или компиляцию с помощью -m32
.
Есть ли какое-либо фундаментальное препятствие для 32-разрядной платформы x86-64? Я полагаю, что поддержка такой химеры добавила бы сложности в любую операционную систему, и всем, кто хочет, чтобы последние 20% должны были просто сделать это Work ™, но все же кажется, что это было бы лучше всего подходит для множества интенсивных вычислительных программ.