есть ли другие преимущества?
Есть лоты других преимуществ.
Для самой библиотеки скрытые символы не могут бытьвставил.Если у вас есть код, подобный этому, в общей библиотеке:
int foo() { return 20; }
int bar() { return foo() + 1; }
что будет возвращено из bar
?Вы можете подумать, что это 21, но вы можете ошибаться: если более ранняя библиотека определила свой собственный foo
, возвращение из bar
может быть что угодно .
Другие преимущества сокрытия символоввключают в себя более быстрое время разрешения символов (когда загрузчик ищет foo
, он должен искать каждую загруженную библиотеку по очереди, и это происходит быстрее, если набор функций exported мал) и меньшие требования к ОЗУ (поскольку имена символов необходимы динамическому загрузчику, все они присутствуют в памяти).
Сокрытие символов также предотвращает случайное зависание конечных пользователей от деталей реализации библиотеки, что позволяет изменять реализацию без риска поломки существующихпользователей.