Как правило, вы можете хранить сколько угодно информации, чтобы восстановить исходное значение указателя, так что да, вы можете, хотя это выходит за рамки гарантий, предлагаемых языком (вам нужно быть уверенным, как ваш конкретный компилятор обрабатывает переинтерпретацию приведений).1001 *
Однако, например, в Windows вы можете быть уверены только в том, что верхнее слово 32-битного указателя для пользовательского кода не ноль (за исключением нулевых указателей).Это подразумевается в макросах Windows API, таких как MAKEINTATOM .Если самым значимым словом может быть ноль, то API-интерфейсы не смогут надежно отличить указатели, представляющие маленькие целые числа, от указателей до текстовых строк.
Так что, в общем, оптимизация таким способом ничего вам не даст, если вызанимаюсь программированием ядра.Кроме того, сохранение нескольких байтов редко стоит дополнительной сложности.
Приветствия & hth.,