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