Связывание на уровне функций (ключ / Gy в VC ++) - для чего это нужно? - PullRequest
21 голосов
/ 10 марта 2009

Какая выгода от использования этого коммутатора в большом решении VS (200 проектов VC)?

Из того, что я понимаю, это в основном влияет на размер получаемых двоичных файлов; но кроме небольших двоичных файлов, может ли FLL помочь уменьшить зависимости между проектами?

Как обычно FLL влияет на время сборки?

Я также был бы признателен за обоснованное объяснение FLL в VC. MSDN Объяснение довольно короткое.

1 Ответ

29 голосов
/ 10 марта 2009

Поскольку вы связали объяснение MSDN, вы знаете, что / Gy гарантирует, что все функции упакованы в их собственный COMDAT. Основным преимуществом этого является то, что если у вас есть идентичные функции, компоновщик может свести их все в один реальный фрагмент кода («свертывание COMDAT»). Это может иметь очень большие последствия, когда у вас много идентичных функций, что часто бывает, когда вы пишете современный C ++, насыщенный шаблонами.

Помимо меньшего размера результирующего исполняемого файла из-за свертывания COMDAT и исключения несвязанных COMDAT, нет другого эффекта / Gy. Точнее говоря, это не помогает уменьшить межпроектные зависимости.

Стоимость - небольшое увеличение времени компиляции (аналогично другим флагам оптимизатора). Обычно это не то, что вы заметите.

...