Поскольку статические библиотеки не содержат готовых двоичных данных, а представляют собой информацию, необходимую компоновщику для создания двоичного файла, эта информация может быть больше, чем встроенные двоичные файлы.
Когда некоторая функция, определенная в заголовочном файле, используется в cpp-file, компилятор помещает свой код (либо встраиваемый, либо просто добавляет) в результирующий объектный файл.Это значит, что будет много дубликатов.Задача компоновщика - объединить их, поэтому статическая библиотека просто ожидает уменьшения компоновщика:)
Обычно размер исполняемого файла обычно больше для статических библиотек, но размер исполняемого файла вместе с динамическими библиотеками обычно меньше.DLL и EXE связаны отдельно, поэтому компоновщик не может знать, какая функциональность необходима в DLL, а какая может быть выброшена.В случае статической библиотеки компоновщик имеет такую информацию и может принимать только те obj-файлы, которые используются.