crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Оптимизация операций в Qt
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Rocky Дата 31.1.2010, 13:59
  думаю там дело не в 8ми битах.. Все зависит от разрядности ОС, от компилятора, от степени оптимизации, выставленной в настройках. например const int = foo() может не дасть ничего. а вот const int& = foo() уже даст. Так что совершенно необязательно что 8 бит и 4. Я к тому что лично я не стал бы зострять внимание сколько конкретно тратится на вызов. Главное понимать что так лучше, а так хуже... =) Если конечно речь не идет о программировании микроконтроллеров и тому подобных вещей.
JuryS1806 Дата 31.1.2010, 2:53
 
Цитата(Rocky @ 31.1.2010, 1:43) *
по-поводу ++i и i++ естественно там разница в создании временного объекта. если i - это простая переменная то может и без разницы (хотя я приучил себя всегда писать ++i, ну, только там где нужно. А i++ - там так нужно.) А вот если это экземпляр класса....

По-поводу const QString (*, & ) и пр чесгря непомню есть ли про это у Страуструпа... но отлично написано у Саттера и Александреску (там 3 книжки небольшие называются "Программирование сложных задач","40 новых сложных задач" - щас точное название не посмотреть, жена спит не хочу будить =) ) - всем советую кстати.. оч много интересного, особенно про оптимизацию кода, stl и пр.)


Однако, расплывчато ! Я вот у Макса Шлее прочитал: при выполнении функции на ее вызов затрачивается, не помню точно, 8 бит, а если ее переменные const соответственно 4 бит . И как проверить быстродействие даже не знаю. И вообще, за последние полгода моя программа выросла на 0,6 Мб /я имею ввиду сам двигатель/ а под виндой не более 400 Кб. Поэтому до оптимизаций мне еще далеко. 8)
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
 
Цитата(gigabyte @ 27.1.2010, 20:12) *
Чем они лучше чем простой int max = a>b ? a : b
для меня компактностью записи и наглядностью
int max = qMax(a, b )
gigabyte Дата 27.1.2010, 18:46
 
Цитата(igor_bogomolov @ 27.1.2010, 16:50) *
В domax лишнее создание переменной.
Можно просто написать return a>b ? a : b;, тогда компилятор сгенерирует идентичный код. По крайней мере вывод objdamp -d для обоих функций одинаков.

Да действительно один в один
SABROG Дата 27.1.2010, 18:04
  Про оптимизацию тут хорошо расписано.

Тролли используют этот код:

{ if (a < b) return a; return b; }


Вместо этого:

return a < b ? a : b;


Не просто так.

Цитата
#

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 для обоих функций одинаков.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 17.4.2024, 1:47