LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Абсолютно непонятно.

а что непонятно? (*ptr) это операция вида

"прочитать из памяти по адресу, который лежит в переменной <ptr>"

в каноническом алгоритме адрес текущего хранится в регистре. а столяровском - адрес текущего хранится в памяти, на которую указывает регистр.

потому любой доступ к текущему у столярова требует дополнительного чтения из памяти. причем эта память относится к предыдушему элементу, а работает он с текущим(проверяет key и берет next), отсюда будут лишние проблемы с локальностью кеша(это если оптимизатором не привести алгоритм столярова к каноническому).

короче для обучения такой код негоден. он и неканоничен, и сложен для понимания за счет лишней косвенности. да и неэффективен.

Исходная версия alysnix, :

Абсолютно непонятно.

а что непонятно? (*ptr) это операция вида

"прочитать из памяти по адресу <ptr>"

в каноническом алгоритме адрес текущего хранится в регистре. а столяровском - адрес текущего хранится в памяти, на которую указывает регистр.

потому любой доступ к текущему у столярова требует дополнительного чтения из памяти. причем эта память относится к предыдушему элементу, а работает он с текущим(проверяет key и берет next), отсюда будут лишние проблемы с локальностью кеша(это если оптимизатором не привести алгоритм столярова к каноническому).

короче для обучения такой код негоден. он и неканоничен, и сложен для понимания за счет лишней косвенности. да и неэффективен.