green а совсем последние еще и напихают в код много чего своего. expert и линктайм компиляция/оптимизация. - особый эффект для кода не замечен пока. больше тормозит при компиляции, но разницы в генерируемом коде не замечал пока.
green конкретно я? хм.. а вы не замечали? у меня щас нет компилята для примера. появится и не пропадет интерес - могу показать. впрочем, простой пример - скомпильте проект с оптимизацией cl 2003 и 2008. сравните результат.
qqwe Я 2003 пропустил, из 6-й сразу на 2005-ю (8-ю) перешёл. Качество кода существенно улучшилось. Пока что не рассматривал детально код, который делает VC++ 2010, но бинарники моего последнего проекта при переходе из 2008 на 2010 потеряли в размере около 4-5%.
6тя есть. неплохой компилер, но иногда падал не вовремя. счас не установлен, потому вычеркиваем. 2005 не имею. есть 2003 и 2008. обе установлены и можно сравнивать результаты. -O1 у 2003 легче 2008. иногда серьезно. ессно, не хэловорды (в смысле кода много). 2010 тоже есть. чтото подозрительно легкая. даже ультимат. не ставлю чтоб не сбить настроек того, что есть. выделить комп под нее пока не выходит. впрочем, 4-5% это мало все равно. 2003 плотнее компилит (например, инферно ему у меня собиралось в ~700кб).
qqwe Интересно... попробую поэкспериментировать. Если есть возможность выложить кусок кода, на котором хорошо проявляется эффект, буду признателен.
я ж сказал. инферно ему. но там нельзя оптимизировать несколько файлов. точнее заголовок омитить, тк он используется для самоотладки. пример почему в теме на пред странице. 2-3 файла. захотите мучить именно это, могу посмотреть какие и, да, студии ультиматные. не знаю как что школьные сделают.
to freeq если влом разбираться в настройках проекта - (хотя там все не так сложно) то нечего винить компилятор и visual studio ну или на края используй для своих асм-хаков Код (Text): __declspec(naked) int Hackfunction(DWORD param1, DWORD param2) { __asm{ } }
С 2010 бывает довольно весело, она как-то без объяснений вырезала один иф. Хорошо, что я тогда интересовался асм листингом и заметил, что она опускает его. В противном случает я бы долго думал почему не работает код. Ну, да, я так оформил иф, что компилер не понял, хотя с моей точки зрения было всё нормально (в асме провернул бы за пару строчек), а студия не поняла юмора. Признаю, был неправ, но она могла хотя бы варнинг состряпать???
karabas_barabas вы вобще топ читали? --- решил проблему следующим образом, заметил что можно указать в настройках проекта, что можно оптимизировать только те функции которые inline, соответсвенно те которые она трогает, делать __stdcall.
ссори за бред выше что я написал, кстати ничего не помагает, раз от раза как повезет, может перекомпилить опять с другим кодом.
2freeq в задаче не пойдет делать убираемый объект глобальным? В этом случае естественно он не будет вырезан оптимизатором ). Но в любом случае, скорее всего прав оптимизатор и ваш трюк - грязный ) Да. ИМХО конечно ))
freeq Это вот этот код не мёртвый: Код (Text): int MyMain() { TEST Test; Test.dwTemp_1 = 1; Test.dwTemp_2 = 2; Test.dwTemp_3 = 3; return 0; } ? И где же используется Test ? Что-то из вашего MyMain этого не видно. Повторяю, не первый год студию используете, а простых вещей не знаете. Ещё и упорствуете в своём невежестве.
нет, это я кинул просто для "понятия" проблемы, сейчас студия не вырезает а например, идет первый Код (Text): if ( ... ) {//после него второй if ( ... ) { //далее код } } дык вот, сейчас она засовывает весь код который под вторым if, во второй if, т.е. вобще нарушает логику.
Хватит уже писать чепуху. Или примеры конкртеные приводи. У всех всё работает как и должно, а у тебя "нарушает логику"...
если у Вас первый if например такой if(CONST_1) то зачем генерировать в коде лишнее условие проверку с константой а если переменная которая становится известной при выборе опции в меню к примеру то она должна оставить оба условия в которых есть такие выражения которые вычисляются при определенном событии в системе
если выполнился первый if, а второй нет, то там идет break, просто забыл поставить, проблему это все равно не решает