メモリの確保・開放時期について

解決


kun  2003-06-05 18:32:00  No: 51520

自動変数の確保、開放のタイミングについてお教えください。

下記のような関数があるとします。
------------------------
void func() {
    {   // <-仮に[A]と呼称します
        char cBuf[256];
    }
}
------------------------
この時のcBufが確保・開放されるタイミングは何時になるのでしょうか?
func関数に入ったときに確保されるのでしょうか。
それとも括弧[A]内に処理が移ったときに確保されるのでしょうか。
また、開放されるのはfunc関数を抜けたときでしょうか。
それとも括弧[A]を抜けたときでしょうか。

この辺りの曖昧な知識を固めたいと思い質問させて頂きました。
よろしくお願いします。


YuO  2003-06-05 21:44:50  No: 51521

VC++の場合,関数に入ったとき/関数から抜けたときです。

ちなみに,関数内で複数の複文があって,異なる複文内でauto変数があった場合,
確保されるメモリはそれぞれの複文における必要メモリの最大量になります。


kun  2003-06-05 22:37:45  No: 51522

YuOさん、レスありがとうございます。

> ちなみに,関数内で複数の複文があって,異なる複文内でauto変数があった場合,
> 確保されるメモリはそれぞれの複文における必要メモリの最大量になります。
この事は初めて知りました。
関数に入ったとき/関数から抜けたときにメモリの確保が行われるとした場合、
関数内の全てのauto変数の合計サイズが確保されるものと考えていました。

今回のYuOさんのレスで、ブロックを使用する事でメモリを節約する事ができると
確信できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加