22.- Curso C++ Básico. El tamaño de los Objetos. De Void a sizeof.
¿Cuál es el tamaño de los objetos en C++?
Introducción al tipo de datos void
- El tipo
voidse refiere a un "vacío" sin tipo, pero en C++ todos los objetos deben tener un tipo asignado. Intentar definir una variable comovoidgenerará un error.
- En funciones que no devuelven valor, se omite la declaración
return, ya que incluirla causaría un error de compilación.
Usos y desaconsejos del tipo void
- Aunque se puede usar
voidcon funciones sin parámetros (herencia del lenguaje C), este uso está desaconsejado en C++. Se recomienda dejar paréntesis vacíos.
- Los punteros
voidson otro uso avanzado, pero se abordarán más adelante en el curso.
Tamaño de los objetos en memoria
- La memoria moderna se organiza en bytes, y cada objeto puede ocupar múltiples direcciones consecutivas. Es importante entender que no hay "bufones aislados", sino contenedores de diferentes tamaños.
- La cantidad de bytes que ocupa un objeto depende del tipo de datos asignado. Los lenguajes modernos abstraen las direcciones de memoria a través de nombres de variables.
Importancia del tamaño del objeto
- Conocer cuánta memoria usa un objeto es útil porque determina la cantidad de información que puede contener. Un bit puede representar dos valores (0 o 1).
- Generalizando, un objeto con n bits puede contener 2^n valores posibles. Por ejemplo, un byte (8 bits) puede almacenar 256 valores diferentes.
Relación entre tamaño y capacidad
- A medida que aumenta el número de bytes utilizados por un objeto, también lo hace la cantidad única de valores que puede almacenar. Esto será explorado más a fondo con tipos fundamentales como enteros.
Tamaño mínimo garantizado por C++
- El tamaño ocupado por variables depende de la arquitectura (32 o 64 bits). C++ garantiza tamaños mínimos para tipos fundamentales aunque pueden variar según la máquina.
Uso del operador sizeof
- Para determinar el tamaño exacto en una máquina específica, se utiliza el operador
sizeof, que devuelve el tamaño en bytes para tipos o variables.
- No se puede usar
sizeofcon el tipovoid, ya que no tiene tamaño definido; intentar hacerlo causaría error.
Ejemplo práctico