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

È stato utile?

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 ...).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top