¿Cómo calculo cuánta RAM tengo?

¿Cómo calculo cuánta RAM tengo?

Estoy ejecutando un programa C++ simple para aprender sobre la memoria asignada dinámicamente ( malloc, reallocy free).

Aquí hay un fragmento de mi código:

void *p = malloc(10); // Allocates 10 bytes in memory; `p` is a pointer to the first byte.

cout << "The value of the pointer p is:      " << p << endl;

Esto genera algo como esto:

The value of the pointer p is: 0x7fbf36c00080

Soy consciente de que el número hexadecimal es la ubicación de memoria a la que apunta p, que es la primera ubicación de memoria de esta asignación.

Al intentar calcular aproximadamente cuánta RAM tengo, miré la cantidad de dígitos en ese número hexadecimal (12 dígitos) y elevé 16 a esa potencia.

Resulta que 16^12 es aproximadamente igual a 2,8x10^14 y dado que cada ubicación de memoria almacena un byte, eso significa que tengo alrededor de 280 TERABYTES de RAM, aunque sé que tengo 8 GB.

¿En qué me he equivocado en mi cálculo?

Respuesta1

Deberías estudiar el concepto de Memoria virtual, para comprender que la memoria física está asignada al espacio de direcciones del proceso.

El hecho de que un proceso de 64 bits pueda tener punteros hasta 2 64 -1 no significa que exista toda esta memoria. El puntero apunta a un segmento de memoria que está asignado a la memoria física en algún lugar de la computadora.

Sólo el sistema operativo sabe cuánta memoria tienes realmente, por lo que necesitas usar su API para recuperar esa cantidad.

Como se ilustra en mi primer enlace de Wikipedia:

ingrese la descripción de la imagen aquí

información relacionada