Какие системы там используют неравномерное представление указателя? [Дубликат
-
27-09-2019 - |
Вопрос
Возможный дубликат:
Есть ли какие-либо платформы, где указатели на разные виды имеют разные размеры?
В нескольких местах я прочитал, что указатели разных типов могут иметь разные представления в стандартных реализациях 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-битными указателями функции. или что-то еще раз другое ...).