Это зависит от миллиона различных факторов и полностью зависит от платформы, компилятора и настроек.
Файл объекта должен содержать всю сборку для тел функций для функций с внешней связью, а также все глобальные переменные с внешней связью. Все, что связано с внутренней связью, может или не может требовать отдельной записи в объектном файле, поскольку они могли быть оптимизированы и интегрированы непосредственно в сайт вызовов. Это сильно зависит от настроек оптимизации.
GCC также имеет опцию «оптимизации времени ссылки», которая по существу добавляет копию всего исходного кода в объектный файл и значительно увеличивает его размер.
Символы отладки также добавляют много дополнительных данных.
Для вашего специфичного для C ++ вопроса: само определение класса на самом деле не видно в сборке. Не встроенные функции-члены - это просто дополнительные функции, которые должны быть скомпилированы, в то время как элементы данных просто обрабатываются так же, как примитивные члены-данные - они будут в стеке вызовов, если вы объявите экземпляры этого типа, но они не будут напрямую воздействовать на код сборки ... если вы не инициализируете вещи с помощью констант; Конечно, константы входят в код.