Jolouster
Come, bebe y ve el bien por todo tu duro trabajo

CPP optimización de estructuras

Autor Jonathan López - November 30, 2022

Ejemplo:

struct ejemplo1 {
	char a; 			// 1 byte
	short b; 			// 2 bytes
	int c; 				// 4 bytes
};

En esta estructura se esperaría que el tamaño de la estructura fuera 7 bytes pero no es así. Ocupa 8 bytes.

struct ejemplo2 {
	char a; 		// 1 byte
	char b; 		// 1 byte
	int c; 			// 4 byte
	short d; 		// 2 byte
};

Esta ultima debería ocupar 8 bytes pero ocupa 9.

Por optimización el compilador trata de pillar bloques contiguos de memoria donde almacenar las estructuras. Usa el tamaño del tipo de variable más grande que se emplea en la estructura. Para ello mete “paddings” para rellenar huecos si los elementos no están bien ordenados.

Para ver los tamaños que realmente ocupan:

sizeof(ejemplo1);  // = 8 bytes
sizeof(ejemplo2);  // = 12 bytes

En estos ejemplos la primera estructura no se puede optimizar. La segunda sí, poniendo el short antes del int.

Conclusiones:

  • En programación el orden importa.
  • Hay que conocer bien todos los detalles para saber qué se puede mejorar.

Hoy día la memoria es muy barata y no es “necesario” optimizar mucho, pero para sistemas embebidos sí lo es. Para mejorar el rendimiento tanto de velocidad como del uso de memoria de un programa también.

Si no se vigila esto desde un principio, luego hay que sopesar si vale la pena el tiempo y el esfuerzo en hacer estas optimizaciones.

keywords: #programación/Cpp #eficiencia


Te invito a que dejes un comentario más abajo y me digas que opinas al respecto.