Вебинар: Парсим С++ - 25.10
Разница в производительности между 32-битными и 64-битными версиями приложений очень сильно зависит от их типа и типов данных, которые они обрабатывают. Но в среднем можно ожидать прирост в пределах 2-20% от простой перекомпиляции программы, что объясняется рядом архитектурных изменений в 64-битных процессорах [1].
Увеличение числа регистров общего назначения в таких процессорах позволяет оптимизировать в функциях работу с локальными переменными, которые более не требуется сохранять в оперативной памяти. Несколько аргументов функций передается через регистры, что также сокращает время их вызова [2].
Расширенное адресное пространство снимает ограничение на объём используемой оперативной памяти в 4 гигабайта, характерное для 32-разрядной архитектуры. Возможность хранить весь необходимый набор данных в оперативной памяти исключает крайне медленные операции подкачки данных с диска, что для ряда программ, работающих с большими массивами данных, позволит достигнуть прирост производительности в несколько раз.
Обратной же стороной перехода к 64-битной версии является увеличение размеров указателей и некоторых других типов данных в два раза, что может вызвать рост требований ПО к оперативной памяти системы. В ряде случаев, это может даже замедлить скорость работы 64-битного приложения, по сравнению с 32-битным. Однако это редкая ситуация и как правило они обусловлены неудачным выбором формата хранимых в программе данных.
Следует также заметить, что при запуске 32-битных версий ПО на 64-битных системах семейства Windows, старые 32-битные приложения будут выполняться чуть медленнее, из-за подсистемы WoW64, эмулирующей 32-битное окружение. В среднем потери для программ из-за этой прослойки WoW64 составят 2-3%, хотя в отдельных случаях это значение может быть гораздо больше.
0