Ответ 1
принятый в настоящее время ответ несколько неполный.
Цель раздела COMDAT - разрешить определение "повторяющихся" разделов в нескольких объектных файлах. Обычно, если один и тот же символ определен в нескольких объектных файлах, компоновщик сообщает об ошибках. Это может вызвать проблемы для некоторых функций языка С++, например шаблонов, которые могут создавать одни и те же символы в разных файлах cpp.
Разделы COMDAT используются, чтобы обойти это. Когда раздел помечен как COMDAT в объектном файле, он также указывает флаг, указывающий, как конфликты должны быть разрешены. Есть множество вариантов, в том числе "просто выберите кого угодно", "убедитесь, что все дубликаты одинакового размера", "убедитесь, что все дубликаты имеют одинаковый контент", "выберите самый большой" и т.д. См. спецификацию COFF для полного списка.
В любом случае, в отличие от того, что сказал принятый в настоящее время ответ, нет никаких требований, так или иначе, о том, что должно содержать содержимое секции COMDAT, Они могут содержать одну процедуру, множество процедур, данных или любую комбинацию кода и данных.