La serie Prime 50 utiliza segmento 07777, offset 0 para el puntero nulo, al menos para PL/I. Los modelos posteriores usaron el segmento 0, el desplazamiento 0 para los punteros nulos en C, lo que exigió nuevas instrucciones como TCNP (puntero nulo de la prueba C), evidentemente como un complemento a todo el código C existente mal escrito que suponía incorrectamente. Las máquinas primarias antiguas y dirigidas a palabras también eran notorias por requerir punteros de bytes más grandes (char * 's) que los punteros de palabra (int *' s).
La serie Eclipse MV de Data General tiene tres formatos de puntero soportados arquitectónicamente (palabra, byte y punteros de bit), dos de los cuales son utilizados por compiladores C: punteros para char * y void * y punteros para todo más. Por razones históricas durante la evolución de la línea de MV de 32 bits desde la línea Nova de 16 bits, los punteros de palabra y punteros de bytes tenían bits de compensación, indirección y protección de anillo en diferentes lugares de la palabra. Pasar un formato de puntero no coincidente a una función dio como resultado fallas de protección. Eventualmente, el compilador de MV C agregó muchas opciones de compatibilidad para intentar tratar con código que tenía errores de discrepancia de tipo de puntero.
Algunos mainframes Honeywell-Bull utilizan el patrón de bits 06000 para los punteros nulos (internos).
El CDC cibernético 180 serie ha punteros de 48 bits que consiste en un anillo, segmento, y offset. La mayoría de los usuarios (en el anillo 11) tienen punteros nulos de 0xB00000000000. Era común en los CDC antiguos: complementan las máquinas para usar una palabra de todos los bits como un indicador especial para todo tipo de datos, incluidas las direcciones no válidas.
La vieja serie HP 3000 utiliza un esquema de direccionamiento diferente para direcciones de byte que para las direcciones de palabra; al igual que varias de las máquinas de arriba, por lo tanto, utiliza diferentes representaciones para los punteros char * y void * que para otros punteros.
El Symbolics Lisp Máquina, una arquitectura de etiquetado, ni siquiera tiene punteros numéricos convencionales; usa el par (básicamente un identificador inexistente) como un puntero nulo C.
Dependiendo del modelo `` memoria '' en uso, los procesadores 8086-familia (PC compatibles) pueden utilizar punteros de 16 bits de datos y de función punteros de 32 bits, o viceversa.
Algunos de 64 bits máquinas Cray representan int * en los 48 bits de una palabra ; char * usa adicionalmente algunos de los 16 bits superiores para indicar una dirección de bytes dentro de una palabra.
Otros enlaces: A message from Chris Torek con más detalles acerca de algunas de estas máquinas.
Curioso, ¿qué sección de la norma permite los diferentes tamaños de puntero? ¿Le importaría publicar esa sección – JaredPar
Nit-pick: el "tipo integral nativo" en C tiene que ser int, que rara vez es de 64 bits, incluso en plataformas de 64 bits, AFAIK. En otras palabras, LP64 es más común que ILP64. – unwind
@JaredPar: No estoy exactamente seguro de dónde dice eso en el estándar, pero esta página http://www.lysator.liu.se/c/rat/d9.html#4-9-6-1 hace mención de ello, con respecto al especificador de formato% p fprintf. @unwind: s/tamaño entero nativo/tamaño de registro nativo/ –