Все ответы, опубликованные здесь, говорят: «Вы не можете». Они правы. Вы не можете.
Но, и я стесняюсь даже упомянуть об этом, - это игры, в которые можно играть. Эти игры - плохая идея. Я не рекомендую их в любой ситуации.
Что за игра? Вбивание стековых дополнительных битов данных в неиспользуемые части адреса и удаление их, где бы вы ни использовали адрес.
Итак, представьте, что у вас есть указатели на структуру или класс размером 32 байта. Если вы убедитесь, что ваши выделения памяти выровнены по 32-байтовому адресу (что легко для динамических распределений, но сложнее гарантировать для стековых), младшие биты адреса будут равны 0. Это означает, что в 5 свободных битах внизу адреса, достаточно для вас поставить флаги, идентификационные номера, значения статуса и т. д. Хранилище бесплатно!
Даже если у вас странный размер структуры, практически любой компилятор C или C ++ и ОС всегда будут выравнивать каждый адрес до 4 байтов.
В 64 битах обычно можно найти значительное количество свободных бит в верхнем конце адресов ... очень вероятно, 16 свободных неиспользованных битов ждут вас. Это зависит от ОС, конечно. А также плохая плохая идея для рассмотрения. Тебе нравится опасность?
Два недостатка:
- Вы должны обязательно замаскировать
ценности, прежде чем пытаться
разыменовать указатель или передать его
ко всему, что может попробовать. Это делает
некрасивый код.
- Вы танцуете за гранью
непереносимость обрыва тупого
опасности. Это как пить
бутылка текилы и ходьба потертая
канат над голодными тиграми. Nude.
(источник: ecoworldly.com )
Есть так много способов, которые могут привести к ошибкам, сбоям и боли. Помните, как я сказал, что компиляторы выравнивают память как минимум до 4 байтов? Ну, это правда. Пока вы не найдете новую ОС, которой нет. И вы едите тигра.
Так что не делай этого.
Но, тем не менее, это действительно способ добавить немного дополнительной информации, такой как номер типа, в каждый адрес. Вы можете увидеть эту технику в коде каждого байта или обфусцированном C.
PS: Действительно, я имею в виду, не делайте этого. Даже если вы любите тигров.