1.11.1 ARM C および C++ ライブラリのライブラリヒープ使用状況の要件

malloc() などのダイナミックなメモリ割り当て関数は、メモリ使用時に明示的にメモリを割り当てます。ただし、一部のライブラリ関数およびメカニズムは暗黙的にヒープからメモリを割り当てます。

ヒープ使用状況の要件がコード開発にとって重要な場合(メモリ量が非常に小さい組み込みシステム用のコード開発など)は、暗黙的および明示的なヒープの要件を両方とも認識する必要があります。
C standardlib では、以下の結果として暗黙的なヒープ使用状況が発生します。
  • ライブラリ関数 fopen() の呼び出し、および最初に I/O 操作が結果ストリームに適用されるとき。
  • コマンドライン引数を main() 関数に渡すとき。
fopen() に割り当てられるヒープメモリのサイズは、FILE 構造体用に 80 バイトです。最初の I/O 操作の発生時、操作が発生する直前に、追加のデフォルトの 512 バイトのヒープメモリが操作に関連付けられたバッファに割り当てられます。setvbuf() を使用して、このバッファのサイズを再設定できます。
fclose() が呼び出されると、デフォルトの 80 バイトのメモリが、予定される再利用のためにフリーリストに保持されます。fclose() で 512 バイトのバッファが解放されます。
main() を宣言して引数を取るには、ヒープから暗黙的に割り当てられた 256 バイトのメモリが必要です。このメモリは、main() の実行中に必要であるため、解放されません。microlib では、main() を宣言して引数を取ることはできないため、このヒープ使用状況要件は standardlib のみに適用されます。standardlib コンテキストで、ヒープがある場合のみに適用されます。

引用されたメモリサイズは今後のリリースで変更される可能性があります。
関連する概念
2.3 microlib のライブラリヒープ使用状況の要件
関連する参考文書
1.11.5 ARM で提供されるヒープおよびヒープを使用するライブラリ関数の使用の回避
1.11.2 メモリ割り当て関数のヒープの実装の選択
非機密扱いPDF file icon PDF 版ARM DUI0808CJ
Copyright © 2014, 2015 ARM.All rights reserved.