Два указателя в одном слове с помощью XOR
От: Mihas  
Дата: 31.08.17 15:28
Оценка:
Читая книгу "Кодеры за работой. Размышления о ремесле программиста", наткнулся на фразу:

Трюк с сохранением в одном слове двух указателей с помощью операции XOR...


Динозавры, разъясните, пожалуйста, что за трюк?
Re: Два указателя в одном слове с помощью XOR
От: watchmaker  
Дата: 31.08.17 15:32
Оценка: 6 (2) +1
Здравствуйте, Mihas, Вы писали:

M> что за трюк?

Например https://en.wikipedia.org/wiki/XOR_linked_list
Re[2]: Два указателя в одном слове с помощью XOR
От: Videoman Россия https://hts.tv/
Дата: 31.08.17 20:02
Оценка:
Здравствуйте, watchmaker, Вы писали:

M>> что за трюк?

W>Например https://en.wikipedia.org/wiki/XOR_linked_list

Трюк не интересный, а вот структура интересная. Имея указатель на node я не могу его извлечь, нужно два указателя? Структура используется в случаях когда указателей на элементы гораздо меньше чем самих элементов в листе, так?
Re[3]: Два указателя в одном слове с помощью XOR
От: Mihas  
Дата: 01.09.17 07:01
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Имея указатель на node я не могу его извлечь, нужно два указателя?

Не так. Не можешь перейти к следующему, не имея указателя на предыдущий.

V>Структура используется в случаях когда указателей на элементы гораздо меньше чем самих элементов в листе, так?

По-моему, простая экономия памяти.
Re[4]: Два указателя в одном слове с помощью XOR
От: Videoman Россия https://hts.tv/
Дата: 06.09.17 20:44
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Не так. Не можешь перейти к следующему, не имея указателя на предыдущий.

Какой из них следующий, а какой предыдущий, определяется программистом. Их можно поменять местами и тогда, обход пойдет в противоположном направлении. Указателей два. Понятно, что таким образом можно пройти список от начала до конца. Меня больше интересует, как с ним работать удаляя или добавляя элементы в произвольных позициях.

M>По-моему, простая экономия памяти.

Это как посмотреть. Если ссылок на узлы больше чем самих узлов, и каждая ссылка это два указателя (если нужны операции удаления и добавления), то выгоднее может оказаться "классический" список.
Re[5]: Два указателя в одном слове с помощью XOR
От: Mihas  
Дата: 07.09.17 06:15
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, Mihas, Вы писали:


M>>Не так. Не можешь перейти к следующему, не имея указателя на предыдущий.

V>Какой из них следующий, а какой предыдущий, определяется программистом. Их можно поменять местами и тогда, обход пойдет в противоположном направлении. Указателей два.
Имея только указатель на узел, невозможно найти соседей. Нужно помнить, откуда пришел, чтобы пойти дальше. Я это хотел сказать. Но, видимо, мы об одном и том же.
Re[4]: Два указателя в одном слове с помощью XOR
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.09.17 10:41
Оценка: 4 (1) +1
Здравствуйте, Mihas, Вы писали:

V>>Структура используется в случаях когда указателей на элементы гораздо меньше чем самих элементов в листе, так?

M>По-моему, простая экономия памяти.

Нет, но эта структура данных позволяет добавлять/удалять элементы по краям списка, пользуясь атомарными операциями с памятью (lock-free).
Re[5]: Два указателя в одном слове с помощью XOR
От: Ops Россия  
Дата: 15.09.17 01:15
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Нет, но эта структура данных позволяет добавлять/удалять элементы по краям списка, пользуясь атомарными операциями с памятью (lock-free).


Разве? На край же нужен отдельный указатель, его тоже нужно менять.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.