Има ли загуба на производителност при свързване и свързване на .so файлове?

Някои хора свързват споделени обектни файлове, така че да нямат записи в техния списък NEEDED и когато свързват тези SO файлове към двоичен файл, вместо това поставят транзитивните зависимости на всички SO файлове в списъка NEEDED на създадения двоичен файл, без да вземат предвид дали binary всъщност се нуждае от тези SO файлове.

Първият акт на несвързване на задължителни SO файлове с определен SO файл се нарича подвързване, а вторият акт на свързване на твърде много SO файлове към определен двоичен файл се нарича свързване.

В момента съм в дискусия с мой колега дали тази схема за изграждане на приложение и неговите SO файлове налага някакви разходи за производителност при изграждане или изпълнение на приложение или неговите SO файлове. Например, може би има допълнителни разходи за динамична разделителна способност на символи за PLT? Може ли някой да хвърли малко светлина върху това, моля?


person Johannes Schaub - litb    schedule 29.08.2012    source източник
comment
Предполагам, че броят на разделителните способности и преместванията на символи има повече значение от броя на свързаните .so файлове. Динамичният линкер със сигурност харесва dlopen, като поддържа refcount на всеки .so   -  person Basile Starynkevitch    schedule 29.08.2012


Отговори (1)


Това със сигурност ще промени ефективността на търсенето на символи, вероятно към по-лошо. Резолюцията на ELF символи е търсене в ширина, като се започне от таблицата със символи на самия изпълним файл, след това таблиците със символи на библиотеките DT_NEEDED на изпълнимия файл, след това таблиците със символи DT_NEEDED на тези библиотеки и т.н. Чрез свързване на основния изпълним файл вероятно ще принуждават повече търсения на символи да преминават през символни таблици на повече библиотеки.

person ajax    schedule 29.08.2012