あなたが言っているように、基本的にC/C++の多くの組み込みアプリケーションは、定義したように動的メモリを取得するために異なるアプローチを使用しています。
私はそれが基本的に少ないメモリの利用可能性と適切な使用のために行われたと思います。
動的メモリ割り当てのために malloc() または calloc() 関数が c でどのように機能するかを理解しようとすると、確かに答えが得られます。私は少しbtを次のように説明できます...
それ(malloc)が実際に行うことは、空きメモリのリンクされたリストを維持することですが、最初は空きリストは空です。最初の malloc() が呼び出されると、sbrk() を呼び出して、空きリスト用の新しいメモリ チャンクを取得します。このメモリは分割されるため、一部はユーザーに返され、残りはフリー リストに戻されます。フリー リストの先頭であるグローバル変数 malloc_head が存在します。malloc() が呼び出されると、そのリストで十分な大きさのメモリを探します。見つかった場合は、リンクされたリストからそのメモリを削除し、ユーザーに返します。free() が呼び出されると、メモリはリンク リストに戻されます。ここで、効率を高めるために、空きリストに要求されたものよりもはるかに大きなメモリのチャンクがある場合、次に、そのチャンクを 2 つのチャンクに分割します。1 つはリクエストのサイズ (8 の倍数にパディングされます) で、残りの部分です。残りは空きリストに入れられ、要求のサイズがユーザーに返されます。
詳細については、http://web.eecs.utk.edu/~huangj/cs360/360/notes/Malloc2/lecture.html http://web.eecs.utk.edu/~huangj/cs360/360 を参照してください
。 /notes/Malloc1/lecture.html
質問1->最初の質問の利点は、メモリの節約とより効率的な方法での割り当てである可能性があります。これは、その方法を実装しているプロジェクトに依存します。
question2-> C で組み込みライブラリや API を見たことがありません。
question3->独自の API の実装については、指定されたリンクと C の R&K の本を参照する必要があります。この本はより詳細に説明しています。