Я строю структуру данных, которая устанавливает в 64-битные целые числа установленный бит каждые 2 или 3 бита.
Для меня было бы удобно, если бы я мог поочередно также хранить указатель в этой структуре (когда они являются конечными узлами в дереве, но это не имеет значения).
Для целей моего представления (которое гарантирует, что установлены либо самый старший, либо второй старший бит), если можно предположить, что у указателей никогда не установлены свои старшие два бита, то есть выполняется это утверждение:
void *sixty_four_bit_pointer = a_valid_address();
bool always_zero = 0xC000000000000000 & sixty_four_bit_pointer;
тогда я могу сделать этот трюк!
Это не безопасно в целом. Это программы, которые трюки, как это, которые привели к /LARGEADDRESSAWARE
флаг в винде. (Иначе: «Вот почему у нас не может быть хороших вещей».)
Что вы можете сделать, это использовать нижние биты вместо верхних битов. Поскольку ваша структура содержит указатель, он уже выровнен по 8 байтов, что означает, что три нижних бита всегда равны 0, поэтому вы можете использовать эти биты в качестве битов тега.
Других решений пока нет …