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