prestar atención a este código:¿por qué usa el movl en lugar de push?
#include <stdio.h>
void a(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
int main()
{
a(1,2,3);
}
después de eso:
gcc -S a.c
ese comando muestra nuestro código fuente en el montaje.
ahora podemos ver en la función principal, nunca usamos el comando "push" para insertar los argumentos de la función a en la pila. y usó "movel" en lugar de eso
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $3, 8(%esp)
movl $2, 4(%esp)
movl $1, (%esp)
call a
leave
¿por qué sucede? ¿cuál es la diferencia entre ellos?
Una pregunta mucho mejor sería por qué esta opción de generación de bloat '-maccumulate-outgoing-args' no se deshabilita automáticamente por' -Os'. –
@R .. ¿Sabes por qué? – Tony
@Tony: obviamente, porque al decidir cuál de los muchos (~ 200) indicadores de optimización para habilitar/deshabilitar para cada opción -O específica, a veces las cosas se deslizan por las grietas. – ninjalj