Saturday, November 21st, 2009 04:11 pm
Прочел об интересном трюке - хранении указателей для двусвязного списка с помощью XOR. Практичность этого трюка сомнительна, разве что в embedded, я бы сам никогда, наверное, не стал им пользоваться. Но идея красивая. 
Sunday, November 22nd, 2009 12:30 am (UTC)
Красиво. Только по нынешним временам это должен быть какой-то очень-очень жёсткий ембеддед.

В обычный эмбед запросто суют джава/дотнет CPU.
Sunday, November 22nd, 2009 12:44 am (UTC)
Забавно.
Sunday, November 22nd, 2009 12:54 am (UTC)
Мне об этом трюке рассказали лет 15 назад. Сборщик мусора должен быть в восторге от таких указателей.
Sunday, November 22nd, 2009 01:03 am (UTC)
Я об этом трюке регулярно читаю, когда обсуждается, на чём могут обломаться сборщики мусора наподобие Boehm GC. А в жизни встречать не приходилось :)
Sunday, November 22nd, 2009 01:07 am (UTC)
Сильно сомневаюсь в том, что есть такие языки.
Sunday, November 22nd, 2009 01:24 am (UTC)
На самом деле boehm gc неплохо работает в средах, где используется изрядное количество библиотек общего назначения, написанных без расчёта на GC. То есть вольности такого рода изрядно редки. Например, про трюк с int* oneBasedArray = malloc(sz)-1; я читал в связи с мусорными проблемами несколько раз, но в жизни опять же не видел.

Это мне напоминает задачу, с которой я недавно развлекался — разодрать DLL-ку на сегменты кода и данных, чтобы их можно было линковать по отдельности. Делается это исходя из того, в какой сегмент «приземляется» base relocation; теоретически никто не обещал, что такое сработает, и руками довольно легко этот метод обломать. Тем не менее, на существующих в дикой природе DLL проблем не возникает.
Sunday, November 22nd, 2009 01:27 am (UTC)
В D можно и указатели туда-сюда кастовать, и сборщик мусора есть. Правда, учитывать такие указатели тамошний GC и не умеет, и не обещает (что естественно).
Sunday, November 22nd, 2009 01:28 am (UTC)
s/сегмент/секция/, конечно же.
Sunday, November 22nd, 2009 01:30 am (UTC)
Ну, так в сиплюсплюсе тоже есть Boehm garbage collector, но в отличие от сборщиков мусора в сильно типизированных языках вроде джавы, его можно обмануть, если очень постараться.