Размер указателей и если этот размер зависит от архитектуры - PullRequest
4 голосов
/ 08 февраля 2012

Что ж, извините за вопрос, он больше похож на общекультурный (не нашел точных ответов).

Если у меня есть что-то вроде

char * Field

или

void * Field

или

double pointers
  • Размер указателя такой же?(насколько я помню из колледжа это было 4 байта, но ...)
  • Является ли размер указателя одинаковым в зависимости от архитектуры процессора?
  • Если я указываю на данныеструктура, размер самого указателя один и тот же, не так ли?

Предположим, примеры в C (я был бы склонен полагать, что это будет то же самое для других языков, которые делаютне обрабатывать указатели напрямую)

Ответы [ 4 ]

3 голосов
/ 08 февраля 2012

Размер указателя такой же?(насколько я помню из колледжа это было 4 байта, но ...)

Не обязательно то же самое и не обязательно 4 байта: Все ли указатели данных имеют одинаковый размер на одной платформе для всехтипы данных?

Одинаков ли размер указателя в зависимости от архитектуры ЦП?

Он варьируется от архитектуры к архитектуре.Даже на одном и том же оборудовании он может варьироваться от операционной системы к операционной системе (например, 32-разрядная или 64-разрядная).

Если я укажу на структуру данных, размер самого указателя будеттоже самое, не правда ли?

Опять же, необязательно: Все ли указатели данных имеют одинаковый размер на одной платформе для всех типов данных?

1 голос
/ 08 февраля 2012
  1. Да, размер указателя не зависит от типа данных, на которые он указывает. РЕДАКТИРОВАТЬ: Видимо не правильно. Смотрите ответ Экс.

  2. Размер указателя может зависеть от процессора, модели памяти, времени выполнения и / или операционной системы.

  3. Опять же, размер указателя не зависит от типа данных, на который он указывает. РЕДАКТИРОВАТЬ: Видимо не правильно. Смотрите ответ Экс.

Вы можете легко узнать размер указателя с помощью конструкции sizeof ().

0 голосов
/ 08 февраля 2012

1) Размер указателя одинаков для всех типов указателей.

2) Обычно в 32-битной архитектуре это будет 4 байта, а в 64-битной архитектуре это будет 8 байтов.

3) Размер указателя будет одинаковым независимо от того, на что вы указываете.

0 голосов
/ 08 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...