Здравствуйте, гость ( Вход | Регистрация )
Rocky | Дата 31.1.2010, 13:59 |
думаю там дело не в 8ми битах.. Все зависит от разрядности ОС, от компилятора, от степени оптимизации, выставленной в настройках. например const int = foo() может не дасть ничего. а вот const int& = foo() уже даст. Так что совершенно необязательно что 8 бит и 4. Я к тому что лично я не стал бы зострять внимание сколько конкретно тратится на вызов. Главное понимать что так лучше, а так хуже... =) Если конечно речь не идет о программировании микроконтроллеров и тому подобных вещей. | |
JuryS1806 | Дата 31.1.2010, 2:53 |
по-поводу ++i и i++ естественно там разница в создании временного объекта. если i - это простая переменная то может и без разницы (хотя я приучил себя всегда писать ++i, ну, только там где нужно. А i++ - там так нужно.) А вот если это экземпляр класса.... По-поводу const QString (*, & ) и пр чесгря непомню есть ли про это у Страуструпа... но отлично написано у Саттера и Александреску (там 3 книжки небольшие называются "Программирование сложных задач","40 новых сложных задач" - щас точное название не посмотреть, жена спит не хочу будить =) ) - всем советую кстати.. оч много интересного, особенно про оптимизацию кода, stl и пр.) Однако, расплывчато ! Я вот у Макса Шлее прочитал: при выполнении функции на ее вызов затрачивается, не помню точно, 8 бит, а если ее переменные const соответственно 4 бит . И как проверить быстродействие даже не знаю. И вообще, за последние полгода моя программа выросла на 0,6 Мб /я имею ввиду сам двигатель/ а под виндой не более 400 Кб. Поэтому до оптимизаций мне еще далеко. P.S. все равно спасибо за ответ. |
|
Rocky | Дата 31.1.2010, 1:43 |
по-поводу ++i и i++ естественно там разница в создании временного объекта. если i - это простая переменная то может и без разницы (хотя я приучил себя всегда писать ++i, ну, только там где нужно. А i++ - там так нужно.) А вот если это экземпляр класса.... По-поводу const QString (*, & ) и пр чесгря непомню есть ли про это у Страуструпа... но отлично написано у Саттера и Александреску (там 3 книжки небольшие называются "Программирование сложных задач","40 новых сложных задач" - щас точное название не посмотреть, жена спит не хочу будить =) ) - всем советую кстати.. оч много интересного, особенно про оптимизацию кода, stl и пр.) |
|
JuryS1806 | Дата 29.1.2010, 18:13 |
А я вот давно задаюсь вопросом: часто использую постоянные составляющие функций. К примеру const QString, const int, const QMenu* и т.д. Это может быть более оптимальным решением, чем использовать просто QString, int и т.д. Или я ошибаюсь ? И еще вот такой вопрос: не желательно ли в принципе использовать статические функции, к примеру для того же класса MainWindow ? К примеру буду хранить настройки в статических QString, int и т.д. и при обращении к ним из других классов буду брать их из класса MainWindow . Или это совсем отрицательно сказывается на производительности ? |
|
Sergey B. | Дата 28.1.2010, 9:45 |
Из Страуструппа Отметим, что пост-инкремент (постфиксный оператор ++) использует промежу- точную переменную, а пре-ипкремент (префиксный оператор ++) нет. По этой при- чине, для итераторов предпочтительнее ++р, а ыер++. |
|
CrackedMind | Дата 28.1.2010, 7:48 |
Цитата Плюс вычилат где-то что структура ++i с точки зрения оптимизации лучше чем i++ Это касается сложных структур данных с тяжелыми конструкторами. Т.к. ++i возвращает ссылку на объект, а i++ создает новый. |
|
Litkevich Yuriy | Дата 27.1.2010, 18:48 |
Чем они лучше чем простой int max = a>b ? a : b для меня компактностью записи и наглядностьюint max = qMax(a, b ) |
|
gigabyte | Дата 27.1.2010, 18:46 |
В domax лишнее создание переменной. Можно просто написать return a>b ? a : b;, тогда компилятор сгенерирует идентичный код. По крайней мере вывод objdamp -d для обоих функций одинаков. Да действительно один в один |
|
SABROG | Дата 27.1.2010, 18:04 |
Про оптимизацию тут хорошо расписано. Тролли используют этот код:
Вместо этого:
Не просто так. Цитата # Be extremely careful when using the questionmark operator. If the returned types aren’t identical, some compilers generate code that crashes at runtime (you won’t even get a compiler warning). QString s; return condition ? s : "nothing"; // crash at runtime - QString vs. const char * |
|
igor_bogomolov | Дата 27.1.2010, 17:50 |
В domax лишнее создание переменной. Можно просто написать return a>b ? a : b;, тогда компилятор сгенерирует идентичный код. По крайней мере вывод objdamp -d для обоих функций одинаков. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 20.4.2024, 16:56 |