ver tipos sirve que para memoria las funcion como caracteristicas memory rust

memory - tipos - ¿Por qué se imprime la dirección de memoria con{: p} mucho más grande que mis especificaciones de RAM?



para que sirve la memoria ram (2)

Lo que ves aquí es un efecto de la memoria virtual . La administración de la memoria es difícil y se vuelve aún más difícil cuando el sistema operativo y decenas de cientos de procesos tienen que compartir la memoria. Para manejar esta gran complejidad, se utilizó el concepto de memoria virtual . Voy a explicar brevemente lo básico aquí; el tema es mucho más complejo y también debes leerlo en otro lado.

En la mayoría de las computadoras modernas, cada proceso cree que posee (casi) el espacio de memoria completo. Pero los procesos nunca tratan con direcciones físicas , sino con direcciones virtuales . Estas direcciones virtuales se asignan a las físicas cada vez que el proceso realmente lee de la memoria. Esta traducción de direcciones se realiza mediante la llamada MMU (unidad de gestión de memoria). Las reglas sobre cómo asignar las direcciones las configura el sistema operativo.

Cuando inicia su PC, el sistema operativo crea una asignación inicial. Cada vez que inicia un proceso, el sistema operativo agrega algunas porciones de memoria física al proceso y modifica la asignación de manera apropiada. De esa forma, el proceso tiene memoria para jugar.

En x86_64, el espacio de direcciones tiene 64 bits de ancho, por lo que cada proceso cree que posee todas esas 2 ^ 64 direcciones. Esto no es cierto, por supuesto:

  1. No hay una sola PC en el mundo con tanta memoria. (De hecho, la mayoría de las CPU hoy en día pueden simplemente usar 280 TB de RAM, ya que internamente solo pueden usar 48 bits para direccionar la memoria física. Y hasta estos 280TB son suficientes por ahora, aparentemente).
  2. Incluso si tuviera tanta memoria, existen otros procesos que también usan parte de esa memoria.

Entonces, ¿qué sucede cuando intentas leer una dirección que no está mapeada (que en 64 bits terrestres, son la gran mayoría de las direcciones)? El MMU desencadena un error de página. Esto hace que la CPU notifique al sistema operativo para manejar esto.

Lo que quiero decir es que en x86, generalmente la primera ubicación comienza en 0, luego en 1, 2, etc., por lo que el número más alto que puede tener es de alrededor de 4 mil millones.

Eso es cierto, pero también es cierto si su sistema x86 tiene menos de 4 GB de RAM. La memoria virtual existe desde hace bastante tiempo.

Así que ese es un breve resumen de por qué ves esas direcciones tan grandes. De nuevo, tenga en cuenta que pasé por alto muchos detalles aquí.

Quiero imprimir la ubicación de la memoria (dirección) de una variable con:

let x = 1; println!("{:p}", &x);

Esto imprime el valor hexadecimal 0x7fff51ef6380 que en decimal es 140734568031104 .

Mi computadora tiene 16GB de RAM, entonces, ¿por qué este gran número? ¿La arquitectura x64 usa una secuencia de intervalos grande en lugar de simplemente 1 incremento para acceder a la ubicación de la memoria?

En x86, generalmente la primera ubicación comienza en 0, luego en 1, 2, etc., por lo que el número más alto que puede tener es de alrededor de 4 mil millones, por lo que el número de dirección siempre fue igual o inferior a 4 mil millones.

¿Por qué este no es el caso con x64?


Los punteros con los que trabaja su programa están en el espacio de direcciones virtuales . x86-64 usa punteros de 64 bits. Este fue uno de los principales objetivos de AMD64, junto con agregar más registros de números enteros y XMM. Tiene razón en que i386 solo tiene punteros de 32 bits que solo cubren 4 GB de espacio de direcciones en cada proceso.

0x7fff51ef6380 parece un puntero de pila, lo que creo que tiene sentido para ese código.

Linux en x86-64 (por ejemplo) coloca la pila cerca de la parte superior del rango canónico inferior de direcciones : el hardware actual x86-64 solo implementa direcciones virtuales de 48 bits y este es el mecanismo para evitar que el software dependa de él. Esto permite que el espacio de direcciones se amplíe en el futuro sin romper el software.

La cantidad de memoria RAM phyiscal en su sistema no tiene nada que ver con esto. Vería (aproximadamente) el mismo número en un sistema x86-64 con 128 MB de RAM, +/- aleatoriedad de diseño del espacio de direcciones de la pila (ASLR) .