NaN boxing
Упаковка указателей, целых и тегов типа в биты числа с плавающей точкой, которые не используются, когда оно означает «не число». Так делает почти любая быстрая динамически типизированная среда выполнения.
У double огромное множество битовых комбинаций означает «не число» — порядок из одних единиц и любая ненулевая мантисса. Остаётся около пятидесяти двух свободных бит на значение, а поскольку указатель на практике занимает лишь сорок восемь, в них с запасом помещаются и указатель, и тег типа. Выигрыш в том, что каждое значение языка занимает ровно восемь байт, число с плавающей точкой хранится прямо, без выделения в куче, а проверка типа — несколько машинных команд. Недостатки: код заполняется масками и сдвигами, отладка превращается в мучение, а допущение о сорока восьми битах не вечно — системы с более глубокой структурой таблиц страниц могут выдавать адреса, которые уже не помещаются; обычно это решают, принудительно размещая выделения в нижней памяти.