2012-02-04 6 views
11

私はC言語を改訂し、alloca/free関数について説明しました。これは、スペースのようなスタックにストレージを割り当てることで記述されています。これはmalloc/freeと同じですか?またはこれは何か違うのですか?ありがとう。Cのalloca関数

+0

次のリンクは、 'alloc'が別の関数であることを示唆しています:http://cboard.cprogramming.com/c-programming/140380-k-r-5-6-stumped-again.html –

+0

あなたが正しいと思います。私はそのアロケータの実装例を考えています。 – Cemre

+0

あなたはK&Rを改訂していますか?あなたはすばらしくなければなりません。 – abelenky

答えて

22

allocaは、スタックにメモリを割り当てるために使用されると思います。そして、はい、これはヒープに割り当てるmallocfreeとは異なります。

allocaを呼び出した関数が呼び出し元に戻るときに自動的に解放されるため、allocaで割り当てられたメモリを解放しないでください。

allocaおよび/またはC99可変長配列を使用すると、これらのツールを慎重に使用するとスタックが簡単にオーバーフローする可能性があるため、危険なビジネスになる可能性があります。

+4

3番目の段落に十分なストレスを与えることはできません。 'alloca'やVLAを使う安全な方法はほとんどありません。 –

3

malloc,callocおよびrealloc関数は、ヒープに領域を割り当てます。

free機能は、以前にこれらの機能によって割り当てられたスペースを "解放"します。

0

古い回答にいくつかの追加情報を追加しています。

malloc()は少数の理由のために使用することができ、それらのいくつかは、

  • (1は、関数呼び出しの間とどまるメモリを必要とする)範囲
  • しかし、余分な1動的なメモリ割り当て

    1. ですmalloc()で追加される作業は、割り当てられたメモリを明示的にfree()する必要があります。

      だから、唯一動的なメモリ割り当て機能を使用すると、free()のオーバーヘッドを避けるために、人は自分のプログラムにalloca()を使用することができます。これは、alloca()が使用されているときにスタック上にメモリが割り当てられているため(他の回答に記載されているように)可能です。

    +0

    @NickAハリスがやりたかったです。私はどんな場合でもそれを修正した。 – cmaster