Перегруженные функции и размер исполняемого файла / библиотеки - PullRequest
0 голосов
/ 06 июля 2011

При изучении фреймворка Qt я заметил, что он завален сотнями перегруженных функций, разбросанных по всем его классам.Это заставляет меня задуматься, насколько эти функции влияют на размер библиотек.

Не пройдя утомительный процесс устранения каждой перегруженной функции, можно ли определить, насколько они влияют на конечный размер каждой библиотеки?

Этот вопрос не связан с каким-либо проектом или проблемой, с которой я столкнулся.Это чистое любопытство.

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

В GCC можно использовать опции -ffunction-section и -fdata-section при компиляции и --gc-section при компоновке.Это приводит к тому, что он по существу создает график вашей программы и удаляет любую функцию, переменную и т. Д., На которые нет ссылок.

Для разделяемых библиотек разделяемая библиотека берет весь код - они все есть (если возможно, ссылаются извне), и вы не можете изменить его в любом случае.по сути, встроенные функции вам, возможно, даже лучше - они служат только для разрешения параметров по умолчанию или чего-то подобного.Встроенные функции также собираются с помощью --gc-section.

3 голосов
/ 06 июля 2011

Имея хороший компоновщик и активируя генерацию кода Link-Time (/LTCG в MSVC) и оптимизацию Link-Time, неиспользуемый код следует удалить из конечного исполняемого файла.Кроме того, если эти классы являются шаблонами, функции-члены даже не создаются, пока они фактически не используются.

template<class T>
struct Foo{
  void WontExistInExe(){
    std::cout << "You won't see me until you call me!\n";
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...