Clang
и GCC
- два полностью независимых компилятора. Когда вы пишете код на исходном языке, вы указываете , что вы хотите, чтобы машина выполняла, а не как , которое должно это делать. Компиляторы свободны в выборе своих способов добраться до тех пор, пока они остаются в пределах, указанных вашим исходным языком. Поэтому неудивительно, что два полученных исполняемых файла отличаются по размеру файла. Кроме того, выбранные инструкции двумя компиляторами могут сильно (или полностью) отличаться, поскольку, например, существует дюжина различных способов представления циклов в машинном коде (в том числе использование преимуществ параллельного выполнения целевого процессора ... или нет). ). Возможно, вы захотите ознакомиться с выступлением Мэтта Годболта от 2017 года (https://www.youtube.com/watch?v=bSkpMdDe4g4);), которое может дать вам краткое, но исчерпывающее представление о том, что на самом деле делают (для вас) компиляторы.