Bloques de memoria

La memoria del ordenador es el almacén de los diferentes valores que se generan al ejecutar un programa.

La memoria se organiza como un conjunto de celdas, típicamente de tamaño 1 byte, cada una de ellas con una dirección asociada.

La dirección en memoria

La dirección permite acceder a la ubicación de cada celda y es un valor en si mismo y, por tanto, también puede almacenarse en otras celdas de la memoria.

Así, en lenguajes como C/C++ existe el tipo puntero (pointer) cuyos valores asociados son direcciones.

Disposición de las celdas

El bloque de memoria necesario para almacenar un valor asociado a un tipo necesitará de una determinada cantidad de celdas y una determinada disposición de éstas.

Por ejemplo, un char en C/C++ ocupa 1 byte y un double ocupa 8 bytes. Sin embargo, el equivalente al double en Python, el tipo float ocupa ¡24 bytes! El motivo es que Python no sólo almacena la representación binaria intrínseca del número, sino otra información relevante dadas las características de este lenguaje. De esos 24 bytes, 8 bytes contendrán los mismos bits que su equivalente en C/C++.

En C++, el bloque de memoria asociado a los tipos de datos nativos está formado por celdas contiguas.

Para otros tipos de datos y lenguajes, las celdas que conforman un bloque de memoria no tienen por qué ser contiguas. Pueden estar distribuidas en diferentes ubicaciones de la memoria.

Por ejemplo, el tipo de dato de C++ vector<tipo>, utilizado para almacenar colecciones de valores de un mismo tipo, tiene sus atributos en posiciones no contiguas.

Incluso el tamaño del bloque de memoria asociado a un tipo puede variar.

El tipo int en Python tienen un número variable de celdas, aumentando conforme lo hace el valor absoluto representado.