1. ホーム
  2. c

[解決済み] alloc、malloc、alloca - 違いは何ですか?

2022-03-09 11:35:28

質問

という印象を持ちました。 alloc を呼び出すと)Objective-Cでは [anyObject alloc] は、実際にはC言語の関数 malloc で、ヒープにメモリが確保されるのですが、これに対する答えがどこにも見つかりませんでした。

また alloc を発見しました。 alloca で、スタックにメモリが確保されます。もし私が間違っていなければ alloc は、オブジェクトを作成するためにヒープにメモリを確保します。

では allocmalloc (そして alloca )? どなたか要約してください。

どのように解決するのですか?

alloc() は標準のCライブラリ関数ではありません。一部の古いコンパイラやライブラリには <alloc.h> ライブラリは、いくつかのメモリ割り当て関数を提供しますが、これは標準的なものではありません。Microsoft Visual C++ ランタイムには Alloc() と多少似ている関数です。 malloc() しかし、これもC言語の標準には含まれていない。

malloc() はプロセスヒープ上にメモリを確保します。を使用して割り当てられたメモリは malloc() を使用して解放されるまでヒープ上に残ります。 free() .

alloca() は、現在の関数のスタックフレーム内でメモリを確保します。を使用して割り当てられたメモリは alloca() は、現在の関数が戻ったときにスタックから削除されます。 alloca() は少量のアロケーションに限られます。

という状況 alloca() が適切であることは稀です。ほとんどすべての場面で malloc() を使用してメモリを確保します。