• 締切済み

関数呼びだし時のスタックポインタの変化について

初めて質問させて頂きます。  takolinと申します。 関数呼びだし時のスタックポインタの変化について理解できないところがあります。 ******************** #include<stdio.h> void function(){ char buffer[10]; } main(){ function(); } ******************** このプログラムをSフラグを立ててgccでコンパイルして、 アセンブリコードを見ると。 function: pushl %ebp; movl %esp,%ebp; subl $24,%esp; となっています。 この場合、Char型の配列を10個確保するのだから、 12Byte(3Word)のメモリーを消費するわけで subl $12,%esp; でいいのでは? ******************** PC: FMV BIBLO NB9/1000L CPU: Pentium31GHz OS: Vine Linux2.5 Compiler: gcc 2.95.3

みんなの回答

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.2

自分のマシンで試してみました。 FreeBSD 3.5 mobile celeron 400MHz gcc 2.7.2.3 で結果は、 function:   pushl %ebp   movl %esp,%ebp   subl $12,%esp になりました。CPU の違いかな?

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.1

関数呼び出しをする前に戻り番地をスタックに積むので その分じゃないですか? もう、アセンブラは何年もやってないので間違ってるかも知れませんが。

関連するQ&A