Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Defake
4 / 4 / 0
Регистрация: 24.08.2011
Сообщений: 191
#1

Оптимизация. Перегрузки vs параметры по умолчанию - C++

25.06.2015, 18:56. Просмотров 346. Ответов 6
Метки нет (Все метки)

Вот я думаю, какой вариант реализации будет быстрее для выполнения программы.

Такой:
C++
1
2
3
4
5
void Show(double restTime = 0) {
    al_flip_display();
    if (restTime)
        al_rest(restTime);
}
Или такой:

C++
1
2
3
4
5
6
7
8
void Show() {
    al_flip_display();
}
 
void Show(double restTime) {
    Show();
    al_rest(restTime);
}
На такой маленькой функции, может, и не будет разницы. Но я сам подход имею в виду. В каком направлении будет увеличиваться оптимизация: в направлении увеличения перегрузок или параметров по умолчанию? Если по умолчанию, то будет больше блоков if в функции. Но для каждой перегрузки тоже ведь нужно будет обращаться по своему дополнительному адресу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2015, 18:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оптимизация. Перегрузки vs параметры по умолчанию (C++):

Параметры по умолчанию в С. - C++
Всем привет! Захотел воспользоватся параметрами по умолчанию в си-шном проекте. И получил следующие ошибки: Действительно данный...

Параметры функции по умолчанию - C++
Приветствую всех! Уважаемые эксперты С++, подскажите, значения параметров по умолчанию должны задаваться в прототипе или в реализации...

Параметры по умолчанию в функции - C++
Всем привет. Есть такой класс: template <typename T> class MyClass { public: MyClass(T *_beg, T *_en):beg(_beg),en(_en) {} ...

Параметры функции по умолчанию - C++
Можно ли в качестве параметра по умолчанию указать элимент класса ? Хотелось бы сделать как то так char* SendMessage(char*...

ODBC, параметры по умолчанию - C++
Доброго утра! Хочу на ПК програмно прописывать источники ODBC. Пример абстрактного, работающего кода. Это некий копи паст - так что не...

Параметры шаблонов функции по умолчанию - C++
есть функция template<class T> T sum(valarray<T> x, size_t left = 0, size_t right = 0){ T result = 0; if(right == 0)...

6
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
25.06.2015, 21:49 #2
А что, если в варианте с перегрузкой передать параметр 0?

Добавлено через 6 минут
Я к тому, что пример не совсем корректный.
В варианте с перегрузкой при передаче параметра 0 в любом случае вызовется функция al_rest, в отличии от варианта с параметром по умолчанию.
0
Defake
4 / 4 / 0
Регистрация: 24.08.2011
Сообщений: 191
25.06.2015, 22:34  [ТС] #3
Я не имел в виду данный пример, а просто продемонстрировал 2 способа. Какой из этих способов лучше для производительности?
0
Убежденный
Ушел с форума
Эксперт С++
15792 / 7229 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
25.06.2015, 22:46 #4
IMHO, компилятор сгенерирует эквивалентный код в обоих случаях.
Но может быть, во втором случае код будет чуточку быстрее из-за
отсутствия ветвлений (if).
1
hoggy
6795 / 2981 / 512
Регистрация: 15.11.2014
Сообщений: 6,732
Завершенные тесты: 1
26.06.2015, 00:54 #5
я бы сделал две разные функции для двух разных случаев.
0
ValeryS
Модератор
6781 / 5189 / 495
Регистрация: 14.02.2011
Сообщений: 17,411
26.06.2015, 01:09 #6
Цитата Сообщение от Defake Посмотреть сообщение
В каком направлении будет увеличиваться оптимизация:
оптимизация чего?
быстродействия или памяти?
чаще всего это антогонисты, чем меньше код тем он медленней работает, и наоборот
например
C++
1
2
for(int i=0;i<4;i++)
 arr[i]=i+1;
будет медленней, чем
C++
1
2
3
4
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
посему пишешь код, натравливаешь на него профилировшик и ищешь узкие места
иногда оптимизировать нафиг не нужно
например твоя функция занимает 1% от всей программы
ускорил ты её в 10 раз, много выиграешь?
1
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
26.06.2015, 08:08 #7
Цитата Сообщение от Убежденный Посмотреть сообщение
Но может быть, во втором случае код будет чуточку быстрее из-за
отсутствия ветвлений (if).
Я сначала тоже так подумал. Потом увидел что во втором случае вызов функции al_rest будет происходить всегда, в отличии от первого случая. Что делает оба примера не идентичными.
Если закрыть на это глаза, тогда нужно определить что быстрее, условие или вызов функции, в которой не знай что творится.
0
26.06.2015, 08:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2015, 08:08
Привет! Вот еще темы с ответами:

Параметры по-умолчанию в виртуальных функциях - C++
Подскажите, это ведь UB ? #include &lt;iostream&gt; class Base { int a; public: Base() : a(1) {}

Указатель на функцию и параметры по умолчанию - C++
Приветствую! Есть такая задача - мне нужно передавать в специальную функцию массив и указатель на функцию. Функции эти для сортировки, и...

параметры процедуры по умолчанию - Delphi
есть процедура procedure MyProc(a : integer = -1); begin b := a ; // b - глобальная переменная end; вызываю - MyProc и...

Параметры конструктора по умолчанию - Visual C++
Привет! Подскажите, что я делаю не так. Создал класс Monstr, как в книжке написано, вот исходники: Monstr.h: #pragma once ref...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.