Существуют ли технические причины для скрытия символов в общей библиотеке? - PullRequest
0 голосов
/ 24 сентября 2018

Какова цель скрытия символов в dll, а не просто экспортировать все?Есть ли какая-то другая выгода, кроме как занять немного больше места в exe?

1 Ответ

0 голосов
/ 24 сентября 2018

есть ли другие преимущества?

Есть лоты других преимуществ.

Для самой библиотеки скрытые символы не могут бытьвставил.Если у вас есть код, подобный этому, в общей библиотеке:

int foo() { return 20; }
int bar() { return foo() + 1; }

что будет возвращено из bar?Вы можете подумать, что это 21, но вы можете ошибаться: если более ранняя библиотека определила свой собственный foo, возвращение из bar может быть что угодно .

Другие преимущества сокрытия символоввключают в себя более быстрое время разрешения символов (когда загрузчик ищет foo, он должен искать каждую загруженную библиотеку по очереди, и это происходит быстрее, если набор функций exported мал) и меньшие требования к ОЗУ (поскольку имена символов необходимы динамическому загрузчику, все они присутствуют в памяти).

Сокрытие символов также предотвращает случайное зависание конечных пользователей от деталей реализации библиотеки, что позволяет изменять реализацию без риска поломки существующихпользователей.

...