Рэймонд Чен рассказал о самой абсурдной оптимизации компилятора x86
Ветеран Microsoft и известный IT-историк Рэймонд Чен поделился очередной великолепной байкой из эпохи, когда Windows включала эмулятор x86-32 для систем на других архитектурах. Чтобы софт работал быстро, эмулятор использовал бинарную трансляцию (по сути, работал как JIT-компилятор, на лету переводя байт-код x86-32 в нативные инструкции процессора). И именно этот транслятор однажды столкнулся с кодом, который заставил инженеров Microsoft схватиться за голову.
Одной из программ потребовалось выделить и инициализировать 64 КБ памяти в стеке. Адекватный компилятор сделал бы это изящно: проверил доступность памяти, сдвинул указатель стека и запустил крошечный цикл для обнуления байтов. Однако компилятор этой программы решил соригинальничать и провел "оптимизацию" — он полностью развернул цикл.
Компилятор выдал 65 536 отдельных инструкций "запись байта в память" подряд. Каждая инструкция весила 4 байта. В итоге, чтобы просто инициализировать 64 КБ памяти, программа тащила за собой 256 КБ скомпилированного кода.
Команду эмулятора Microsoft этот программный монстр возмутил настолько, что они специально добавили в свой бинарный транслятор костыль: обнаружив эту абсурдную простыню кода, эмулятор молча удалял её и подменял нормальным, компактным циклом.
🥸 Новости IT: 📱 Telegram | 📱 ВК | 📲 MAX
Post #11540
972

- ❤ 7
- 😁 6
- 👍 4