64 занимает место в кэше в два раза больше, чем 32.
И правда, но можно использовать 32-битные числа в x64 приложении и у x64 с регистрами лучше.
Протестировал 4 варианта программы, в которой простое LZSS сжатие: Visual Studio (последняя) - x64 с 64 битными индексами, x64 с 32 битными индексами, x86, MinGW GCC x64 с 64 из MSYS2 (последний). Вышло по времени в секундах выполнения примерно: VS x64+64 и x64+32 - 17.4 с, VS x86 - 17.5 с, GCC x64 - от 15.5 до 17.5. С GCC не понял, сначала было около 15.5, потом то 17, то 16, а от VS стабильно 17.x. Как понимаю, из-за маленького кол-ва переменных, у меня не повлияла замена 64 на 32 бит чисел, а x86 может хуже работать из-за регистров, GCC лучше в среднем.
Дополнительно заменил цикл с do {} while на while () как выше, у GCC x64 осталось также (15-17 с), а вот VS x64+64 - 25.5 с. Разница в 1.46 раз из-за другой записи.
Для VS по умолчанию пустой проект Release. Для GCC такая компиляция:
gcc -O2 -Wall -Wextra -static -static-libgcc ./main.c ./LZSS.c -o LZSS.exe
UPD: В этот раз толку от x86 не было, но тогда был немного другой код, другая версия VS и не проверял на GCC x86, Win7, FX-8300 (или Phenom II X4 945), а сейчас Win10, 5600X.