CodeGym /Curso de Java /Python SELF ES /Memoria RAM y representación de datos

Memoria RAM y representación de datos

Python SELF ES
Nivel 52 , Lección 1
Disponible

8.1 Memoria RAM

La memoria RAM (Random Access Memory) del ordenador es un conjunto de celdas de memoria, cada una con una dirección única. Estas celdas pueden almacenar distintos tipos de datos, como números, caracteres y punteros. Cuando un programa se ejecuta, almacena sus datos e instrucciones en esta memoria para un acceso rápido.

Ejemplo de celdas de memoria:

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79

Cada celda tiene su número de orden, también llamado dirección de la celda en la memoria o simplemente dirección. Si tu ordenador tiene 8 GB de memoria, tiene 8 mil millones de estas celdas donde puedes almacenar algo útil.

Bits y Bytes

Cada celda puede almacenar un byte de información. Cada byte consta de 8 bits, y cada bit puede contener solo 0 o 1. Ejemplo (para números enteros positivos):

Número Representación en bits Redondeado al byte
0 0 00000000
1 1 00000001
100 1100100 01100100
1000 1111101000 00000011-11101000
1000 000 000 111011100110101100101000000000 00111011-10011010-11001010-00000000

Cuantos más bytes ocupa una variable, más valores puede almacenar. Ejemplo:

  • 1 byte — 256 valores únicos
  • 2 bytes — 65 mil valores únicos
  • 3 bytes — 16 millones
  • 4 bytes — 4 mil millones

8.2 Cómo se representan los datos en la memoria

Tipos de datos y su representación

Datos numéricos dentro del procesador y en la memoria

  • Números enteros: se almacenan en forma binaria. El tamaño puede variar (1 byte, 2 bytes, 4 bytes).
  • Números de punto flotante: se almacenan en formato de punto flotante (por ejemplo, el formato IEEE 754 para números de 4 bytes y 8 bytes).

x = 42  # Número entero
y = 3.14  # Número de punto flotante

¡Importante! En Python, los tipos integrados int y float son clases completas que pueden realizar cálculos complejos con números de longitud infinita. Sin embargo, si usas bibliotecas para cálculos científicos o IA, te encontrarás con el formato de datos del que he hablado antes.

Datos de caracteres en la memoria del ordenador

Los caracteres y las cadenas se almacenan en la memoria como secuencias de bytes. Por ejemplo, en la codificación ASCII, cada carácter ocupa 1 byte, mientras que en la codificación UTF-8 puede ocupar de 1 a 4 bytes.

En Python 3.x, de forma predeterminada, se utiliza la codificación UTF-8 para las cadenas, pero puedes leer archivos donde el texto se almacena en otros formatos o enviar datos por red en una codificación diferente a UTF-8.

Ejemplo:


char = 'A'  # Carácter
string = "Hello, world!"  # Cadena

Los caracteres individuales en Python no tienen su propio tipo: también se utiliza el tipo str. Sin embargo, en la memoria, estas cadenas se almacenan por carácter. Un carácter generalmente ocupa de 1 a 4 bytes.

Punteros

Los punteros almacenan direcciones de otras celdas de memoria. Permiten que los programas trabajen con estructuras de datos dinámicas y gestionen la memoria de manera más efectiva.

Ejemplo:


list = [1, 2, 3, 4]  # Lista
list_pointer = id(list)  # Puntero al inicio de la lista

8.3 Ejemplos de representación de datos en la memoria RAM

1. Representación de números enteros

Los números enteros se almacenan en la memoria como números binarios (bits). Dependiendo del tipo de datos, pueden ocupar diferentes cantidades de bytes. Por ejemplo, int generalmente ocupa 4 bytes (32 bits).

Así es como se representará el número 42 en la memoria:

00000000 00000000 00000000 00101010

2. Representación de números de punto flotante

Los números de punto flotante (por ejemplo, tipo float) se almacenan en la memoria en formato de punto flotante, usualmente bajo el estándar IEEE 754. float generalmente ocupa 4 bytes (32 bits) y double — 8 bytes (64 bits).

¡Importante! Estos son tipos de datos estándar vinculados a la memoria y al procesador. El tipo float en Python corresponde al tipo común double y ocupa 8 bytes.

Así es como se representará el número 3.14 en la memoria:

01000000 01001000 11110110 01100110

3. Representación de caracteres y cadenas

Los caracteres (por ejemplo, tipo char) se almacenan en la memoria como secuencias de bytes. Las cadenas son arrays de caracteres. En los lenguajes C/C++, las cadenas terminan con un byte nulo (\0), pero en Python esto no ocurre.

Así es como se representará la cadena Hello en la memoria:

'H' 'e' 'l' 'l' 'o'

Lo cual, a su vez, se representa en ceros y unos:

01001000 01100101 01101100 01101100 01101111

8.4 Direccionamiento de memoria dinámica

La memoria dinámica se asigna y libera durante la ejecución del programa, según sea necesario. Todos los objetos que creas en Python se crean en esta memoria.

Se divide en 2 tipos:

Heap: Área de memoria desde la cual se asignan objetos dinámicos. Esta memoria se gestiona a través de funciones de asignación (por ejemplo, malloc en C) y liberación (por ejemplo, free en C).

Stack: Área de memoria utilizada para almacenar variables locales y datos de llamadas a funciones. La memoria se asigna y libera automáticamente al entrar y salir de una función.

Nuevamente, no puedo mostrar un ejemplo en el lenguaje Python, ya que es demasiado de alto nivel para tales acciones. Puedo dar un ejemplo en el lenguaje C:


// Asignación dinámica de memoria para un array de 10 enteros
int *dynamic_var = (int *)malloc(sizeof(int) * 10); 

// Liberación de la memoria
free(dynamic_var);  

Direccionamiento de memoria — es el proceso de determinar una dirección única para cada celda de memoria. Cada dirección indica una ubicación específica en la memoria que puede contener datos o instrucciones.

Tipos de direccionamiento

Direccionamiento físico: acceso directo a direcciones físicas de celdas de memoria. Gestionado por hardware (por ejemplo, el controlador de memoria).

Direccionamiento virtual: utiliza un mecanismo de gestión de memoria, como la memoria paginada o segmentada, para proporcionar a los procesos un espacio de direcciones aislado y protegido.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION