la asignación de memoria de variables locales
Pregunta
void function(int a, int b, int c) {
char buffer1[5];
char buffer2[10];
}
Hay que recordar que la memoria sólo puede abordarse en múltiplos de la palabra Talla. Una palabra en nuestro caso es de 4 bytes, o 32 bits. Por lo que nuestra memoria intermedia de bytes es 5 realmente va a tomar 8 bytes (2 palabras) de la memoria, y nuestro buffer de 10 bytes es va a tomar 12 bytes (3 palabras) de memoria. Es por eso que está siendo SP restado por 20.
¿Por qué no es ceil ((5 + 10) / 4) * 4 = 16?
Solución
Debido a las variables individuales deben estar alineados. Con su fórmula propuesta, que le Alineación de sólo la primera variable en la pila, dejando siguientes variables no alineados, lo cual es malo para el rendimiento.
Esto también se conoce como "paquete" y se puede hacer en C / C ++ con pragmas, pero sólo es útil en casos muy específicos y puede ser peligroso tanto para el rendimiento y como causa de las trampas de tiempo de ejecución potenciales. Algunos procesadores van a generar fallos en los accesos sin alinear en tiempo de ejecución, que impactarán su programa.
Otros consejos
Las variables sobre su arquitectura, están alineados de forma individual. la Memoria Intermedia 1 se levanta redondeado a 8 y tampón 2 a 12, de modo que ambos de sus direcciones de partida son de 4 bytes alineados. Así 8 + 12 = 20.