¿Qué espacios de direcciones de memoria hay?

¿Qué formas de espacios de direcciones de memoria se han utilizado?

Hoy en día, un gran espacio de direcciones virtuales planas es común. Históricamente, se han utilizado espacios de direcciones más complicados, como un par de una dirección base y un desplazamiento, un par de un número de segmento y un desplazamiento, una dirección de palabra más un índice para un byte u otro subobjeto, etc. .

De vez en cuando, varias respuestas y comentarios afirman que los punteros de C / C ++ son esencialmente enteros. Este es un modelo incorrecto para C / C ++, ya que la variedad de espacios de direcciones es sin duda la causa de algunas de las reglas de C sobre las operaciones de puntero. Por ejemplo, no definir aritmética de punteros más allá de una matriz simplifica la compatibilidad con los punteros en un modelo base y de compensación. Los límites en la conversión de punteros simplifican el soporte para los modelos de dirección más datos extra.

Esa afirmación recurrente motiva esta pregunta. Estoy buscando información sobre la variedad de espacios de direcciones para ilustrar que un puntero C / C ++ no es necesariamente un número entero simple y que las restricciones de C / C ++ en las operaciones de punteros son razonables dada la gran variedad de máquinas que se admiten.

La información útil puede incluir:

Ejemplos de arquitecturas de computadora con varios espacios de direcciones y descripciones de esos espacios.Ejemplos de varios espacios de direcciones todavía en uso en máquinas que se fabrican actualmente.Referencias a documentación o explicación, especialmente URLs.Elaboración de cómo los espacios de direcciones motivan las reglas de puntero de C / C ++.

Esta es una pregunta amplia, así que estoy abierto a sugerencias sobre cómo manejarlo. Me encantaría ver la edición colaborativa en una sola respuesta generalmente inclusiva. Sin embargo, eso puede dejar de otorgar reputación como se merece. Sugiero votaciones múltiples contribuciones útiles.

Respuestas a la pregunta(2)

Su respuesta a la pregunta