Это взято из C и основывается на этом. Предположим, что у нас есть 32-битный указатель
char* charPointer;
Он указывает на какое-то место в памяти, которое содержит некоторые данные. Он знает, что приращения этого указателя находятся в 1 байт и т.д. С другой стороны,
int* intPointer;
также указывает на какое-то место в памяти, и если мы его увеличиваем, он знает, что он должен увеличиваться на 4 байта, если добавить к нему 1.
Вопрос в том, как мы можем адресовать полные 32 бита адресного пространства (2 ^ 32) - 4 гигабайта с этими указателями, если, очевидно, они содержат некоторую информацию в них, что позволяет их разделять друг от друга, например char*
или int*
, поэтому это оставляет нас не с 32 байтами, а с меньшим.
При вводе этого вопроса я пришел к мысли, может быть, это все синтаксический сахар и действительно для компилятора? Может быть, необработанный указатель всего 32 бит, и он не заботится о типе? Это так?