Другие языки программирования и технологии

Скорость работы указателей и переменных? С++

А что будет быстрее выделить память под указатель или объявить переменную? float * a = new float; float b; Разименовать и присвоить значение указателю или присвоить значение переменной? *a=10; b=10; То что всему своё место - понятно, но всё же...
Ку
Кузнецов
9 740
Попробую поразмышлять. Указатель - это переменная в 4 байта, в которой содержится адрес того объекта, на который вы создаете указатель.
Соответственно, инструкция float *a = new float; создает переменную и помещает в нее адрес свободных ячеек в динамической памяти.
Инструкция float b; создает переменную в управляемой памяти, и не присваивает ей значения ( в ней будет содержаться мусор) . То есть в данном случае выигрыш в скорости у второй инструкции.
Дальше:
*a = 10; По адресу, содержащемуся в а происходит поиск ячейки, и в нее записывается число 10.
b = 10; Так же происходит поиск нужной ячейки и запись в нее числа 10. Тут по скорости одинаково.
В итоге - выигрыш у второго варианта, через переменную. Но это лишь в этом примере. При частом использовании вашего указателя и переменной, выигрыш в скорости будет всё же у указателя. И особенно, если будете хранить в указателе не переменную типа int, а объекты или массивы. Тогда время, сэкономленное на создание копий объектов здорово можно снизить за счет передачи адреса объекта, а не его локальной копии.
Эрик Садыков
Эрик Садыков
45 384
Лучший ответ
эта разница не играет никакой роли (да даже если бы она и имела хоть-какое-то значение, вы всё равно никуда от неё не денетесь) .
но если из чистого любопытства, то выделение/освобождение памяти в куче (оператор new) гораздо медленнее стековых операций (локальные объекты) , а разыменование добавляет как минимум одну низкоуровневую операцию.