Подробности реализации указателя в C

я бы хотел знатьархитектуры, которые нарушают предположения Я перечислил ниже. Кроме того, я хотел бы знать, является ли какое-либо из предположений ложным для всех архитектур (то есть, если какое-либо из них просто совершенно неверно).

sizeof (int *) == sizeof (char *) == sizeof (void *) == sizeof (func_ptr *)

Представление в памяти всех указателей для данной архитектуры одинаково независимо от типа данных, на который указывает.

Представление указателя в памяти такое же, как целое число той же длины в битах, что и архитектура.

Умножение и деление типов данных указателя запрещено только компилятором. ПРИМЕЧАНИЕ: Да, я знаю, что это бессмысленно. Что я имею в виду - есть ли аппаратная поддержка, чтобы запретить это неправильное использование?

Все значения указателя могут быть преобразованы в одно целое число. Другими словами, какие архитектуры все еще используют сегменты и смещения?

Увеличение указателя эквивалентно добавлениюsizeof(the pointed data type) на адрес памяти, сохраненный указателем. Еслиp являетсяint32* тогдаp+1 равен адресу памяти через 4 байтаp.

Я больше всего привык к тому, что указатели используются в непрерывном виртуальном пространстве памяти. Для такого использования я обычно могу считать их адресами в числовой строке. Смотрите вопрос переполнения стекаСравнение указателей.

Ответы на вопрос(11)

Ваш ответ на вопрос