¿Por qué es necesario un relleno de palabra no utilizado al comienzo del espacio de almacenamiento dinámico asignado?

Depende de la arquitectura del procesador, pero con la mayoría de las familias de procesadores actuales, se puede acceder más rápido a los objetos en la memoria cuando están alineados con una dirección de memoria de 4 bytes (32 bits) u 8 bytes (64 bits).

Esto se debe a que las líneas de dirección del procesador generalmente están optimizadas para acceder a los objetos desde esas direcciones, por lo que hace que el programa sea más rápido (Acceder a un valor de 16 bits en una dirección de memoria impar es muy costoso, en el peor de los casos, el procesador tardará varios ciclos solo para leer 2 bytes, o use un ciclo para leer un valor de 32 bits de la dirección par más cercana, y use más ciclos para cambiar el contenido en la posición “correcta” y enmascararlo [Tenga en cuenta que algunas instrucciones requieren más ciclos que otras , porque el acceso a la memoria es más lento que el acceso al registro del procesador. Es por eso que en el ensamblaje un registro normalmente se borra haciendo XOR consigo mismo, en lugar de cargarlo con un “0” constante que proviene de la imagen del programa]).

Un compilador tiene en cuenta estos “costos” de estas operaciones e intentará aprovechar el método menos costoso, sacrificando un poco de pérdida de memoria por el rendimiento.

Es posible que desee comprobar si se produce el mismo comportamiento si deshabilita completamente todas las optimizaciones.