Моя проблема:
Мне нужно закодировать дополнительную информацию об объекте в указателе на объект. Я думал, что смогу сделать это, используя часть указателя. То есть использовать несколько битов для кодирования логических флагов. Насколько я знаю, то же самое делается с определенными типами дескрипторов в ядре windows.
Фон:
Я пишу небольшую систему управления памятью, которая может собирать неиспользуемые объекты. Чтобы уменьшить потребление памяти ссылками на объекты и ускорить копирование, я хочу использовать указатели с дополнительными закодированными данными, например. состояние объекта (живой или готовый к сбору), бит блокировки и подобные вещи, которые могут быть представлены одним битом.
Мой вопрос:
Как я могу закодировать такую информацию в 64-битный указатель, фактически не перезаписывая важные биты указателя?
Поскольку x64 windows имеет ограниченное адресное пространство, я считаю, что не все 64 бита указателя используются, поэтому я считаю, что это должно быть возможно. Однако мне не удалось найти, какие биты окна действительно используют для указателя, а какие нет. Чтобы уточнить, этот вопрос касается пользовательского режима в 64-битных окнах.
Заранее спасибо.
GetSystemInfo
и посмотреть наlpMaximumApplicationAddress
, чтобы увидеть количество битов, используемых ОС. Конечно, вы должны быть готовы к тому, что битов не хватит на то, что вам нужно, и использовать резервный механизм в этом случае. - person Raymond Chen   schedule 25.05.2020