История изменений
Исправление X512, (текущая версия) :
А линь не использует релокаций, машинный код 1 к 1 отображается в память из файла.
Использует: запись адресов импортированных символов в GOT — это тоже релокация, для неё используется та же таблица релокации.
У одного Firefox сотни тысяч модулей, так что при таком подходе сотню тысяч набить легко — именно потому мелкие модули линкуют в крупные модули
Для таких крупных приложений это оправдано. Но есть много не таких больших приложений где динамическая линковка с релокациями будет быстро работать. Можно также сделать кэш на диске с релоцированными модулями и загружать их по тому же виртуальному адресу. 64 битного адресного пространства должно хватить чтобы зарезервировать виртуальные адреса под все модули в системе. Так ещё можно экономить таблицу страниц виртуальной памяти в ядре используя те же части таблиц для одного модуля в разных процессах.
И как ты предлагаешь новому модулю работать с переменными старого модуля?
Глобальные переменные старого модуля теряются при выгрузке. Можно их сохранять в файл, для этого есть стандартная система серилизации графов объектов Stores.
Исходная версия X512, :
А линь не использует релокаций, машинный код 1 к 1 отображается в память из файла.
Использует: запись адресов импортированных символов в GOT — это тоже релокация, для неё используется та же таблица релокации.
У одного Firefox сотни тысяч модулей, так что при таком подходе сотню тысяч набить легко — именно потому мелкие модули линкуют в крупные модули
Для таких крупных приложений это оправдано. Но есть много не таких больших приложений где динамическая линковка с релокациями будет быстро работать. Можно также сделать кэш на диске с релоцированными модулями и загружать их по тому же виртуальному адресу. 64 битного адресного пространства должно хватить чтобы зарезервировать виртуальные адреса под все модули в системе.
И как ты предлагаешь новому модулю работать с переменными старого модуля?
Глобальные переменные старого модуля теряются при выгрузке. Можно их сохранять в файл, для этого есть стандартная система серилизации графов объектов Stores.