История изменений
Исправление alysnix, (текущая версия) :
Абсолютно непонятно.
а что непонятно? (*ptr) это операция вида
"прочитать из памяти по адресу, который лежит в переменной <ptr>"
в каноническом алгоритме адрес текущего хранится в регистре. а столяровском - адрес текущего хранится в памяти, на которую указывает регистр.
потому любой доступ к текущему у столярова требует дополнительного чтения из памяти. причем эта память относится к предыдушему элементу, а работает он с текущим(проверяет key и берет next), отсюда будут лишние проблемы с локальностью кеша(это если оптимизатором не привести алгоритм столярова к каноническому).
короче для обучения такой код негоден. он и неканоничен, и сложен для понимания за счет лишней косвенности. да и неэффективен.
Исходная версия alysnix, :
Абсолютно непонятно.
а что непонятно? (*ptr) это операция вида
"прочитать из памяти по адресу <ptr>"
в каноническом алгоритме адрес текущего хранится в регистре. а столяровском - адрес текущего хранится в памяти, на которую указывает регистр.
потому любой доступ к текущему у столярова требует дополнительного чтения из памяти. причем эта память относится к предыдушему элементу, а работает он с текущим(проверяет key и берет next), отсюда будут лишние проблемы с локальностью кеша(это если оптимизатором не привести алгоритм столярова к каноническому).
короче для обучения такой код негоден. он и неканоничен, и сложен для понимания за счет лишней косвенности. да и неэффективен.