注意を払う:その後なぜpushの代わりにmovlを使用していますか?このコードへ
#include <stdio.h>
void a(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
int main()
{
a(1,2,3);
}
:
gcc -S a.c
アセンブリにおける当社のソースコードを表示するコマンド。
今私たちはメイン関数で見ることができます、我々は決しての引数をスタックにプッシュするために "プッシュ"コマンドを使用しません。その代わりに「モベル」を使用しました
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
なぜ起こりますか? それらの違いは何ですか?
これは、この膨大な生成オプション '-maccumulate-outgoing-args'が' -Os'によって自動的に無効化されない理由です。 –
@R ..だからあなたはなぜそれを知っていますか? – Tony
@Tony:明らかに、特定の-Oオプションごとに多くの(〜200)個の最適化フラグのうちのどれを有効/無効にするかを決めるときに、状況がクラックする可能性があります。 – ninjalj