Ни GCC, ни Clang не являются компиляторами - они на самом деле программы-драйверы инструментов. Это означает, что они вызывают компилятор, ассемблер и компоновщик.
Если вы скомпилируете свой код с помощью компилятора C или C ++, вы получите ту же самую сборку. Ассемблер будет производить те же объекты. Разница заключается в том, что драйвер цепочки инструментов будет обеспечивать разные входные данные для компоновщика для двух разных языков: разные стартапы (C ++ требует код для выполнения конструкторов и деструкторов для объектов со статическим или локальным потоком хранилища на уровне пространства имен и требует инфраструктуры для стека например, кадры для поддержки разматывания во время обработки исключений), стандартная библиотека C ++ (которая также имеет объекты статической длительности хранения на уровне пространства имен) и, возможно, дополнительные библиотеки времени выполнения (например, libgcc с его инфраструктурой разматывания стека).
Короче говоря, это не компилятор, вызывающий увеличение занимаемой площади, это связывание материалов, которые вы выбрали, выбрав язык C ++.
Это правда, что в C ++ есть философия «плати только за то, что ты используешь», но, используя язык, ты платишь за него. Вы можете отключить части языка (RTTI, обработка исключений), но тогда вы больше не используете C ++. Как упомянуто в другом ответе, если вы вообще не используете стандартную библиотеку, вы можете дать указание драйверу не указывать это (--Wl, - по мере необходимости), но если вы не собираетесь использовать какие-либо функции C ++ или его библиотеки, почему вы даже выбираете C ++ в качестве языка программирования?