Просто чтобы уточнить оба предыдущих ответа (которые являются хорошими ответами):
Компилятор абсолютно не объединит ваши классы.Некоторые компоновщики могут иметь некоторые оптимизации в этом направлении, но это ни в коем случае не стандартная функция, и ни стандартные компоновщики Microsoft, ни GNU / Linux не делают этого.Обычно компоновщик делает это только в том случае, если вы генерируете слабые записи с одинаковыми именами в объектных файлах напрямую, как это происходит, например, с экземплярами шаблона.Не существует стандартного способа получить это поведение непосредственно в C / C ++, хотя, по крайней мере, GCC предлагает расширения для управления этой связью самостоятельно.
Вы должны сделать это самостоятельно, хотя это на самом деле оптимизация.Джейсон прав, что это «просто» сократит размер кода, но на современных архитектурах ПК это само по себе огромная оптимизация.Кэши кода на ЦП не становятся намного больше, а скорости памяти нигде не близки к скорости ЦП, поэтому ошибки в кеше, вызванные чрезмерно огромным образом кода, могут очень серьезно повлиять на производительность.Существуют тесты, показывающие, что компиляция ядра Linux или больших приложений, таких как Firefox или OpenOffice с помощью -Os (оптимизация по размеру), в некоторых рабочих нагрузках происходит быстрее с большим отрывом, чем при компиляции с -O3.