Какие системы там используют неравномерное представление указателя? [Дубликат

StackOverflow https://stackoverflow.com/questions/3860593

Вопрос

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

В нескольких местах я прочитал, что указатели разных типов могут иметь разные представления в стандартных реализациях C. Это одно, что делает его необходимым отдать аргументы указателя на printf, например

int foo;
printf("address is %p\n", (void *) &foo);

Я скептически относился к этому и поквали через стандарт C99 (документ WG14 N1256, доступный на http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf.). В 6.2.5.27 он читает:

Указатель на void должен иметь такое же требования к представлению и выравниванию как указатель на тип символа. Точно так же указатели к квалифицированным или неквалифицированным версиям совместимых типов должны иметь одинаковое требования к представлению и выравниванию. Все указатели на типы структуре должны иметь такое же требования к представлению и выравниванию, что и друг. Все указатели на профсоюзные типы должны иметь такое же требования к представлению и выравниванию, как друг друга. Указатели на другие типы не должны иметь такое же требования к представлению или выравниванию.

Итак, это действительно звучит как соответствующий C99 внедрение может использовать разные представления для указателей различных типов.

Мой вопрос в том, это: Какие реализации / архитектуры существуют, которые фактически используют разные представления для указателей разных типов?

Это было полезно?

Решение

Классический гриф (не знаю о своих новых продуктах) не смог отвечать персонажам с регулярными указателями, так char* и поэтому void* были отличными от родных векторных указателей.

(Смотрите комментарий Кейта ниже, однако. Использовать использование abi abi, и повернув биты адреса низкого порядка к концу высококачественного порядка, они иногда сделали «точные» и «грубые» указатели, совместимые с степень.)

Другие советы

Вероятно, самым известным является процессоры реального режима X86, которые могут иметь 16-битные указатели данных и 32-разрядные указатели функции в зависимости от выбранного вами модели памяти (или у вас могут быть 32-разрядные указатели данных с 16-битными указателями функции. или что-то еще раз другое ...).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top