Я переписываю все структуры данных, которые я изучил в школе, как упражнение, чтобы укрепить мое понимание основ информатики, но я пытаюсь оптимизировать свои наивные реализации, которые я создал, когда я был моложе.Скорость доступа к указателю
Это привело меня к вопросу:
У меня есть эти несколько строк из моей реализации связанного списка, где температура используются в обеих вариантах ...
Node<T> *temp = head;
if(temp == nullptr) {
...
}
... // temp used here
Моего связанный список также имеет атрибут long listSize
, поэтому указанная выше линия является аналогом
if(!listSize) {
...
}
... // temp used here, too.
Это очевидно. Что менее очевидно (для меня), какая из них будет быстрее для компьютера.
От чего (мало) Я понимаю о указателях, любая операция с ними довольно дорога, что заставляет меня поверить, что первое могло быть менее оптимальным, чем последнее; однако я не совсем уверен.
Может кто-нибудь помочь прояснить этот нюанс для меня?
Спасибо, erip
EDIT
После размещения этого я решил поставить эксперимент. Я решил сделать первую реализацию method2
и вторую реализацию method1
. Я запускал его несколько раз на логарифмических входах в диапазоне от 10 М до 1 В, и по большому счету method2
был быстрее (хотя и не очень - незначительный 1us), чем method1
.
После некоторого созерцания, я полагаю, это имеет смысл, поскольку указатели 8-байтовые на моей архитектуре, которые имеют тот же размер, что и длинный int. Таким образом, сравнение с NULL
должно быть очень похожим процессом и, вероятно, займет примерно одно и то же время.
Вторая кажется быстрее, потому что нет назначения. Но это просто догадки. Мера, чтобы узнать. – emlai
В обоих случаях небольшое значение сравнивается с нолем. Могут быть незначительные различия, но даже с некоторой чрезвычайно большой относительной разницей влияние на ваш код, скорее всего, будет неизмеримым. Тем не менее, сделайте ** измерение **, чтобы установить, действительно ли вы видите какую-либо разницу или нет. –
@zenith переменной temp будет по-прежнему понадобиться позже. Я говорил в терминах выражения 'if'. – erip