Если указатели — это просто целые числа, содержащие адрес (4 байта — 32 бита), как они хранят дополнительные адреса в 64-разрядной памяти?

#c #pointers #64-bit

#c #указатели #64-разрядный

Вопрос:

При использовании функции sizeof() в программах на c все рассмотренные мной указатели, похоже, возвращают размер 4 байта. Я видел в Интернете, что указатели — это просто целочисленные адреса памяти. Как это имеет смысл в 64-разрядных архитектурах, которые потенциально могли бы иметь адреса памяти, к которым нельзя получить доступ за 4 байта?

Комментарии:

1. В 64-битной архитектуре вы бы (вероятно) получили sizeof(void*) == 8 .

2. спасибо за ответ. Мой компьютер 64-разрядный, и он возвращает 4 для sizeof (void *)?

3. Затем вы компилируете для 32 бит. Проверьте параметры компилятора (или сообщите нам, какой компилятор вы используете).

4. Большинство современных 64-разрядных операционных систем поддерживают 32-разрядный режим для обеспечения обратной совместимости. Если sizeof(void*) == 4 с вами, то вы, вероятно, ориентируетесь на 32-разрядную платформу, то есть ваша программа будет работать в 32-разрядном режиме. Проверьте документацию вашего компилятора о том, как создать 64-разрядную программу.

5. en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

Ответ №1:

Большинство современных 64-разрядных операционных систем поддерживают 32-разрядный режим для обеспечения обратной совместимости. Если sizeof(void*) == 4 с вами, то вы, вероятно, ориентируетесь на 32-разрядную платформу вашей операционной системы, так что ваша программа будет работать в 32-разрядном режиме.

Проверьте документацию вашего компилятора о том, как настроить таргетинг на 64-разрядную платформу вашей операционной системы. Впоследствии вы должны это заметить sizeof(void*) == 8 .

Ответ №2:

Если указатели — это просто целые числа, содержащие адрес (4 байта — 32 бита), как они хранят дополнительные адреса в 64-разрядной памяти?

32-разрядный указатель не может хранить 64-разрядные адреса. Вот почему указатели имеют 64 бита в 64-разрядных системах.