Pull to refresh

Firefox не вмещается в 32-битное адресное пространство

Reading time 1 min
Views 3.2K
Разработчики Mozilla столкнулись с проблемой: в процессе компиляции mozilla-inbound под Windows вылетает ошибка (см. баг 709193).

nswindowmediator.cpp(821): fatal error C1001: An internal error has occurred in the compiler. LINK: fatal error LNK1000: Internal error during IMAGE::BuildImage

Проведённое расследование показало, что компоновщик выходит за пределы виртуального адресного пространства во время оптимизации. Ему не хватает 3 ГБ памяти, которые выделяет приложению 32-битная Windows.

Аналогичная проблема возникла перед разработчиками в начале 2010 года, когда компоновщик вышел за пределы 2 ГБ, но тогда проблему удалось решить переходом на лимит 3 ГБ (см. баг 543034), сейчас такого варианта нет.

В качестве временного решения разработчики заморозили добавление функционала в mozilla-inbound и исключили из билда несколько новых модулей: Graphite, libreg и SPDY. Теперь думают, что делать дальше. В такой ситуации есть несколько вариантов: 1) выделить часть кода libxul в отдельные библиотеки; 2) попробовать перейти на MSVC 2010; 3) компилировать 32-битные билды в 64-битной ОС. Проблему сейчас обсуждают на mozilla.dev.platform.

Для передовой версии Firefox — 32-битной версии под Windows, которой пользуются 90% аудитории — используется двухэтапная процедура оптимизации на профилях (Profile-Guided Optimisation, PGO). После первого прохода компилятора составляется профиль работы браузера в реальной среде, после чего осуществляется окончательная компиляция оптимизированной программы. Mozilla перешла на PGO четыре года назад, новый метод улучшил производительность примерно на 10%.
Tags:
Hubs:
+59
Comments 116
Comments Comments 116

Articles