Мне нужен способ пометить указатель как часть набора x или часть набора y (т. Е. Тег имеет только 2 «состояния»), это означает, что можно предположить untagged = x и tagged =y.
В настоящее время я смотрю на использование побитового xor для этого:
ptr ^ magic = encoded_ptr
encoded_ptr ^ magic = ptr
, но я озадачен тем, как определить, помечен ли указатель в первую очередь.Я использую это, чтобы пометить, откуда берутся узлы пула в связанном списке, чтобы при отсоединении они могли вернуться к правильным perant.
Обновление
Просто чтобы всем тем, кто предлагает сохранить флаг в дополнительных элементах данных, было ясно, что я ограничен sizeof(void*)
, поэтому я не могу добавлять новых участников, иначе я бы это сделал.Кроме того, пулы не являются смежными, они состоят из множества страниц, отслеживание диапазонов добавит слишком много накладных расходов (мне нужно быстрое и простое решение , если можно так назвать).