Страницы

Поиск по вопросам

понедельник, 10 декабря 2018 г.

Влияют ли указатели на производительность?

Появился вопрос связанный с этим кодом, а конкретнее с функцией square. Когда у функции скорость выполнения будет больше, с использованием указателей или без них? Я где-то слышал или читал, что с указателями будет бытрее, потому что при их использовании не создается дополнительная переменная, это так?
#include
float square(float *number);
int main() { float number = 4.0; float second_number = square(&number);
printf("Number two = %f
", second_number); printf("Number = %f
", number);
getchar(); return 0; }
float square(float *number) { return *number * *number; }


Ответ

Давайте для начала отставим cargo cult. Быстрее не потому, что «с указателями», быстрее потому, что эффективнее. Для того, чтобы понять, как будет эффективнее, вы должны понимать, что именно происходит и где именно теряется скорость. Без этого ваш вопрос похож на «будет ли еда вкуснее, если досыпать сахара?»
В вашем случае при компиляции в release mode функция будет вшита в точку вызова и различий вовсе не будет. Компиляторы, поверьте, умеют оптимизировать гораздо лучше вас.
Вы допускаете типичную ошибку новичка: пытаетесь оптимизировать (а) не разобравшись в том, как оно работает и почему, (б) в ущерб смыслу программы, (в) без предварительного профилирования. Не делайте так.

Для вашего случая разница могла бы быть с плохим компилятором, который не умеет оптимизировать. Для этого случая у вас есть передача 32 бит float против передачи 32 или 64 бит указателя, плюс затраты на косвенный доступ. Прикидывайте сами.
Но таких плохих компиляторов уже нет. Кроме того, разницу в несколько наносекунд вы вряд ли заметите, расходы на старт программы или ввод/вывод (и случайные флуктуации внутри них) на порядки больше. А уж коммуникация с пользователем замедляет всё ещё на несколько порядков.

Комментариев нет:

Отправить комментарий