Короткий ответ - нет.
В системе без ASLR (например, XP) загрузка DLL по нежелательному адресу имеет несколько затрат:
- Раздел перемещения должен быть проанализирован, и исправления должны быть применены ко всему изображению.
- Акт применения исправлений приводит к ошибкам копирования при записи, которые относительно дороги с точки зрения использования процессора, а также вынуждают страницы считываться с диска, даже если на них не ссылается само приложение.
- Каждый процесс, который загружает DLL по не предпочтительному адресу, получает личную копию каждой записанной страницы, что приводит к увеличению использования памяти.
Позиции 2 и 3 на сегодняшний день являются самыми большими затратами и являются основной причиной, по которой вручную требовался перебазирование DLL-библиотек.
В ASLR исправления применяются прозрачно в ОС, благодаря чему создается впечатление, что DLL действительно загружена по своему предпочтительному адресу. Нет ошибок копирования при записи и не создаются страницы, закрытые для процесса. Кроме того, исправления применяются только к страницам, к которым фактически обращается приложение, а не ко всему изображению, что означает, что с диска не считываются дополнительные данные.
Кроме того, схемы ручного перебазирования не могут предотвратить все конфликты базовых адресов (например, библиотеки DLL разных поставщиков могут конфликтовать друг с другом, или DLL-библиотека ОС может увеличиться в размерах из-за исправления и переместиться в диапазон зарезервирован для некоторой другой DLL и т. д.). ASLR намного эффективнее справляется с этими проблемами, поэтому если рассматривать систему в целом, она может реально улучшить производительность.