2017-02-22 7 views
0

私はアロケータがC言語でできることについて混乱しています。アロケータは、必要に応じてヒープ要求を満たすために初期化されていないデータセグメントを使用できますか?

タイトルと同様に、アロケータは必要に応じてヒープ要求を満たすために初期化されていないデータセグメントを使用できますか?

+1

まず、Cのアロケータが何であるか教えてください。 – DeiDei

+0

メモリアロケータ – YINGYING

+0

おそらく私はヒープアロケータと言うべきですか? – YINGYING

答えて

2

「メモリアロケータ」という用語は、C言語を定義する標準では意味を持ちません。しかし、彼らはCランタイムライブラリが提供しなければならない "メモリ管理関数"のセットを定義しているので、あなたが求めている関数であると仮定します。

基準はまた、場所を定義していないか、メモリが機能がmalloccallocreallocfreeが存在し、指定された意味を持っている必要がありますだけであることから、割り当てられているにもか。したがって、どこからメモリを割り当てるかは、実装次第です。

「初期化されていないデータセグメント」という用語は、一般に、プログラムが使用するメモリ量をローダーが予約する必要があることを指定する、コンパイルされた実行可能ファイルのセクションを指します。

私が知っているすべての実装(または、少なくとも「初期化されていないデータセグメント」という用語が意味するもの)では、そのセクションは初期化されていない静的変数に使用されます。

ほとんどの実装では、Cランタイムはメモリにブロックを取得するためにOSカーネルを呼び出すことによってヒープを形成し、プログラムに割り当てます。

Linuxのプロセスメモリレイアウトについては、hereの説明があります。

関連する問題