Связывание на уровне функций (/Gy переключаются в VC ++) - Для чего это хорошо?

Переменная 'buffer' указывает на какой-то адрес мусорной памяти. Сначала вам нужно выделить необходимую память, используя функцию malloc или сделать «буфер» статическим массивом вместо указателя.

21
задан Tim Sylvester 14 June 2016 в 00:28
поделиться

1 ответ

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

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

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

29
ответ дан 29 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: