Pointer tagging: как рантаймы прячут данные прямо внутри указателя — 15 мая 2026 г. в 10:28:17.653
Pointer tagging: как рантаймы прячут данные прямо внутри указателя В x86-64 Linux пользовательские процессы обычно используют не все 64 бита адреса. На практике адреса занимают около 48 бит, а верхние биты часто остаются свободными. И вот тут начинается низкоуровневая магия. Некоторые рантаймы кладут в эти верхние биты служебную информацию: тип объекта, флаги, состояние GC, короткий идентификатор или другой metadata-tag. Перед разыменованием указатель очищается маской, и процессор снова видит обычный валидный адрес. Это называется pointer tagging. Зачем это нужно: - можно хранить метаданные без отдельной структуры - меньше аллокаций - лучше cache locality - быстрее проверка типа или состояния объекта - меньше overhead в рантайме Такой подход используют Lisp-рантаймы, garbage collectors, JavaScript-движки и VM, где каждый байт и каждый лишний переход по памяти имеют значение. Идея простая: если часть битов в указателе всё равно не участвует в адресации, почему бы не заставить их работать.

