Если вы только что достигли предела ОЗУ, вы, вероятно, сможете услышать, как работает диск, и монитор активности системы сообщит вам об этом. Но если связывание все еще связано с процессором (то есть, если загрузка процессора все еще высока), это не проблема. И если связывание связано с IO, наиболее распространенным виновником может быть информация времени выполнения. Взгляните на размер исполняемого файла в любом случае.
Чтобы ответить на вашу проблему по-другому: вы интенсивно используете шаблон? Для каждого использования шаблона с другим параметром типа создается новый экземпляр всего шаблона, поэтому вы получаете больше работы для компоновщика. Однако, чтобы сделать это на самом деле заметным, вам нужно использовать какую-то библиотеку, действительно перегруженную шаблонами. Многие из проекта Boost соответствуют требованиям - я получил раздувание кода на основе шаблонов при использовании Boost :: Spirit со сложной грамматикой. И ~ 4000 строк кода, скомпилированных до 7,7M исполняемого файла - при изменении одной строки удвоилось количество требуемых специализаций и размер конечного исполняемого файла. Впрочем, встраивание очень помогло, что привело к выходу 1,9 млн.
Совместно используемые библиотеки могут вызывать другие проблемы, вы можете посмотреть документацию на -fvisibility = hidden, и это в любом случае улучшит ваш код. Из руководства GCC по -видимости:
Using this feature can very substantially
improve linking and load times of shared object libraries, produce
more optimized code, provide near-perfect API export and prevent
symbol clashes. It is *strongly* recommended that you use this in
any shared objects you distribute.
Фактически, компоновщик обычно должен поддерживать возможность для приложения или для других библиотек переопределять символы, определенные в библиотеке, хотя обычно это не предназначенное использование. Обратите внимание, что использование этого не бесплатно, но требует (тривиальных) изменений кода.
Ссылка, предлагаемая документами: http://gcc.gnu.org/wiki/Visibility