ブロック内の変数

関数の内部でブロック作ったときってその中で変数を新たに宣言したときに 新しくスタックフレームを構成するってこと? んなことしたら、そのブロックの中で外側のローカル変数アクセスするときに大変じゃん (gccは関数内関数でそういうことをやるけど)。 関数で使う分は内部でブロックを使って宣言されているのも含めて 関数の頭で確保するもんだと思ってたけど違うんだろうか (少なくともそうするコンパイラがあるのは事実)。 まあ、

func()
{
    char foo[10];
    {
        char hoge[10];
    }
    {
        char mogera[10];
    }
}

とあったときに、30バイト+α(アライメントを揃える分)確保するのか 20バイト+αで済ませるのかという違いはあるけど。

え〜と、理屈の上では hoge と mogera は実体が同じでも問題ないと思うんですが、なにかまずいことありますかね。まぁ、そこまでやる処理系があるかどうかという点はまた別ですけど。
あと、なんというか自動変数に確保・開放とか言っているあたり、そもそもスタックフレーム自体というかヒープ領域とスタックの扱いについて認知してないですよね。元ネタの人は。(そんなことは承知の上で書いてるんでしょうけど)