Con quali sistemi là fuori uso rappresentazione puntatore non uniforme? [duplicare]
-
27-09-2019 - |
Domanda
Eventuali duplicati:
Sono ci sono delle piattaforme in cui puntatori a diversi tipi hanno dimensioni diverse?
Ho letto in diversi luoghi che i puntatori di tipi diversi possono avere diverse rappresentazioni in implementazioni standard conformi C. Questa è una cosa che rende necessario argomenti puntatore cast a printf, per es.
int foo;
printf("address is %p\n", (void *) &foo);
ero scettico di questo e attizzava attraverso lo standard C99 (documento WG14 N1256, disponibile all'indirizzo http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf ). A 6.2.5.27 si legge:
Un puntatore a vuoto ha gli stessi requisiti di rappresentazione e allineamento come puntatore a un tipo di carattere. Allo stesso modo, i puntatori alle versioni qualificate o non qualificate di tipi compatibili hanno gli stessi requisiti di rappresentatività e di allineamento. Tutti i puntatori a tipi di struttura devono avere la stessa rappresentazione e requisiti di allineamento come l'altro. Tutti i puntatori a tipi unione devono avere la stessa rappresentazione e requisiti di allineamento come l'altro. Puntatori ad altri tipi non hanno bisogno la stessa requisiti di rappresentatività o di allineamento.
Quindi, in effetti suona come un conforme attuazione C99 potrebbe usare differenti rappresentazioni per puntatori di tipo diverso.
La mia domanda è questa: che cosa / architetture esistono implementazioni C che in realtà utilizzano differenti rappresentazioni per puntatori di tipo diverso
Soluzione
Classic Cray (non so circa i loro nuovi prodotti) non poteva caratteri di indirizzo con puntatori regolari, in modo da char*
e quindi void*
erano diverse da puntatori vettore nativi.
(il commento di See Keith seguito, però. Non ci può essere stato diverso ABI è in uso, e ruotando i bit di indirizzo di ordine inferiore al fine di ordine superiore, hanno fatto a volte fanno la "fine" e puntatori "grossolani" compatibile ad un grado.)
Altri suggerimenti
Probabilmente il più noto è il processori x86 in modalità reale, che potrebbero avere i puntatori di dati a 16 bit e puntatori a funzione a 32 bit a seconda del modello di memoria si è scelto (o si potrebbe avere puntatori dati a 32-bit con 16- puntatori a funzione po ', o qualcosa di diverso ancora una volta ...).