BOB51 писал(а):Правда это "книжная рекомендация" - на практическом тесте экономии байт с 12...
я слежу за вашим "блогом", BOB51, поскольку мне интересен избранный вами тернистый путь "первооткрывателя" Америки
но могу вам сказать, что у вас сложилось катастрофически неверное представление о языке С/С++, соответственно вы сами себя обрекли на "открытия"... например, недавно вас удивляло, как заремаривание большого куска кода практически никак не влияет на итоговый размер прошивки... теперь вот тоже удивляетесь, что выбрасывание "лишнего" экономит всего 12 байт...
постарайтесь осознать и смириться с тем фактом, что
оптимизатор современного компилятора анализирует написанный вами код и самостоятельно выбрасывает из него участки, которые никогда не будут исполнены. именно по этой причине вы можете заремарить то, что и так никогда не будет работать, и удивляться... например:
Код: Выделить всё
int var = 1;
if(!var){
// здесь 250 килобайт кода
} else {
var = 1;
}
в этом примере, как бы вы не модифицировали упомянутые 250 килобайт кода, вы совершенно не увидите разницы в размере итоговой прошивки! потому как согласно написанному, эти 250 килобайт никогда не будут выполняться - зачем же помещать в итоговую прошивку этот код?!
аналогично поступит компилятор (не всякий, конечно, и не всегда, но в общем случае - да) с выделенными массивами, к которым никто никогда не обращается... и со многими другими вещами. например, он запросто может проинлайнить функцию, и вы не обнаружите в коде оператора
ret или
rcall. а может сделать ровно наоборот - добавить вызов функции там, где вы даже и не ожидаете (например, для выполнения пролога и эпилога функций). и сделает это он по вашей команде "оптимизировать" код, но сделает по-своему.
так что вы просто окончательно определитесь: либо вы осваиваете С/С++ во всей их красе, либо так и остаетесь ассемблерщиком, не осознающим, что для сбора урожая с сотни гектаров пашни давно придуманы комбайны, и никто не пользуется лопатой...