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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top