2012-01-19 1 views
1

可能性の重複:
In C, do braces act as a stack frame?ステートメントブロックの入力時に新しいスタックフレームが作成されますか?

int main() 
{ 
    int i=10; 

    { 
     int i=100; 
     printf("%d", i); 
    } 
} 

は、 "{" と "}" の内部には、新しいスタックフレームを作成しますか?

+2

[THIS] [1] これはかなり明確です。 [1]:http://stackoverflow.com/questions/2759371/in-c-do-braces-act-as-a-stack-frame – DonCallisto

+2

@DonCallisto FYI、コメントで、あなたはリンクを作成'[link_title](http:// link-url /)' - これは質問の中でもうまくいきます。 –

+0

@ RichardJ.RossIII情報ありがとう – DonCallisto

答えて

6

これは完全に実装に依存しますが、そこに実装する場合、答えはいいえです。 2つのi変数は、通常、同じスタックフレーム内の2つの別々の変数によって実装されますが、この特定のケースでは、最初のiを省略することもできます。

(i386上で)スタックフレームを作成するのは、サブルーチンを呼び出すときだけです(リターンアドレスだけであっても)。これはあなたの場合には起こりません。

1

おそらく。おそらくそうではありません。 lanaguageはそれを必要としないので、コンパイラは自由に自由に実行できます。

2

コンパイラがかゆみを感じている場合のみ。確かに言葉の必要条件はない。より具体的には、非常に多くの地元住民のためにストレージを最適化することを除いて、コンパイラがここでフレームをプッシュするような衝動を感じるような理由は考えられません。コンパイラは、実行時フレームなしで名前を完全に管理することができます。