LINUX.ORG.RU

История изменений

Исправление X512, (текущая версия) :

А линь не использует релокаций, машинный код 1 к 1 отображается в память из файла.

Использует: запись адресов импортированных символов в GOT — это тоже релокация, для неё используется та же таблица релокации.

У одного Firefox сотни тысяч модулей, так что при таком подходе сотню тысяч набить легко — именно потому мелкие модули линкуют в крупные модули

Для таких крупных приложений это оправдано. Но есть много не таких больших приложений где динамическая линковка с релокациями будет быстро работать. Можно также сделать кэш на диске с релоцированными модулями и загружать их по тому же виртуальному адресу. 64 битного адресного пространства должно хватить чтобы зарезервировать виртуальные адреса под все модули в системе. Так ещё можно экономить таблицу страниц виртуальной памяти в ядре используя те же части таблиц для одного модуля в разных процессах.

И как ты предлагаешь новому модулю работать с переменными старого модуля?

Глобальные переменные старого модуля теряются при выгрузке. Можно их сохранять в файл, для этого есть стандартная система серилизации графов объектов Stores.

Исходная версия X512, :

А линь не использует релокаций, машинный код 1 к 1 отображается в память из файла.

Использует: запись адресов импортированных символов в GOT — это тоже релокация, для неё используется та же таблица релокации.

У одного Firefox сотни тысяч модулей, так что при таком подходе сотню тысяч набить легко — именно потому мелкие модули линкуют в крупные модули

Для таких крупных приложений это оправдано. Но есть много не таких больших приложений где динамическая линковка с релокациями будет быстро работать. Можно также сделать кэш на диске с релоцированными модулями и загружать их по тому же виртуальному адресу. 64 битного адресного пространства должно хватить чтобы зарезервировать виртуальные адреса под все модули в системе.

И как ты предлагаешь новому модулю работать с переменными старого модуля?

Глобальные переменные старого модуля теряются при выгрузке. Можно их сохранять в файл, для этого есть стандартная система серилизации графов объектов Stores.