Objective-Cのalloc
([anyObject alloc]
を呼び出すと、実際にC関数malloc
とメモリがヒープに割り当てられますが、どこにも見つからないという印象を受けました。これに対する答え。
また、alloc
を検索しているときに、スタック内のメモリを割り当てるalloca
を見つけました。私が間違っていない場合、alloc
はヒープにメモリを割り当ててオブジェクトを作成します。
では、alloc
とmalloc
(およびalloca
)の違いは何ですか?誰でも要約できますか?
alloc()
は標準Cライブラリ関数ではありません。一部の古いコンパイラとライブラリには、いくつかのメモリ割り当て関数を提供する_<alloc.h>
_ライブラリが含まれていますが、これは標準ではありません。 Microsoft Visual C++ランタイムには、Alloc()
と多少似たmalloc()
関数が含まれていますが、これもC標準の一部ではありません。
malloc()
は、プロセスヒープにメモリを割り当てます。 malloc()
を使用して割り当てられたメモリは、free()
を使用して解放されるまでヒープに残ります。
alloca()
は、現在の関数のスタックフレーム内にメモリを割り当てます。 alloca()
を使用して割り当てられたメモリは、現在の関数が戻るときにスタックから削除されます。 alloca()
は小さな割り当てに制限されています。
alloca()
が適切な状況はまれです。ほとんどすべての状況で、malloc()
を使用してメモリを割り当てる必要があります。
alloc
関数は、heap
の長さでsizeバイトの領域またはブロックを割り当てるために使用されます。
malloc
関数は、heap
ストレージを割り当てるために使用されます。その名前はメモリ割り当てを表します。
本C++ Primerの逐語的な記述は覚えていませんが、機能には大きな違いがあります。たとえば、C++のnewはメモリを割り当てますが、メモリにデータを構築します。 std :: allocatorはメモリを割り当てますが、コンストラクターを呼び出しません。同じことがこれらのC関数にも当てはまります。 1つは割り当てますが、構築はしません。割り当てて構築します。