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