Pregunta

  

Duplicar posibles:
   ¿Hay alguna plataformas donde punteros a diferentes tipos tienen diferentes tamaños?

He leído en varios lugares que los punteros de diferentes tipos pueden tener diferentes representaciones en las implementaciones de C-conforme estándar. Esto es una cosa que hace que sea necesario argumentos puntero fundido a printf, por ejemplo.

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

Yo era escéptico de esto y empujado a través de la norma C99 (documento WG14 N1256, disponible en http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf ). En 6.2.5.27 se lee:

  

Un puntero a vacío tendrá los mismos requisitos de representación y de alineación como una   puntero a un tipo de carácter. Del mismo modo, los punteros a las versiones cualificados o no de   tipos compatibles tendrán los mismos requisitos de representación y de alineación. Todos los punteros a tipos de estructuras tendrán la misma representación y requisitos de alineación   como entre sí. Todos los punteros a tipos de la Unión tiene la misma representación y   requisitos de alineación como entre sí. Los punteros a otros tipos no necesitan tener la misma   requisitos de representación o de alineación.

Por lo tanto, en efecto, suena como una aplicación conforme C99 podría utilizar diferentes representaciones para los punteros de diferentes tipos.

Mi pregunta es la siguiente:? lo / C existen implementaciones de arquitecturas que realmente utilizan diferentes representaciones para los punteros de diferentes tipos

¿Fue útil?

Solución

Classic Cray (no sé acerca de sus nuevos productos) no pudiera caracteres de dirección con punteros regulares, por lo que char* y por lo tanto void* eran diferentes de los punteros del vector nativas.

(comentario de Sede Keith más adelante, sin embargo. No podría haber sido diferente ABI está en uso, y mediante la rotación de los los bits de dirección de orden inferior hasta el final de orden superior, lo hicieron a veces hacen que el "bien" y punteros "gruesas" compatible a un grado.)

Otros consejos

Probablemente el más conocido es el de los procesadores x86 en modo real, que podrían tener punteros de datos de 16 bits y los punteros de función de 32 bits, dependiendo del modelo de memoria que usted eligió (o podría tener punteros de datos de 32 bits con 16- punteros de función bits, o algo diferente una vez más ...).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top