4.25 __rt_heap_extend()

rt_heap.h で定義される __rt_heap_extend() 関数は、可能な場合、ヒープに追加するための 8 バイト境界で整列された新しいメモリブロックを返します。

__rt_stackheap_init() を再実装する場合は、この関数を再実装する必要があります。プロトタイプの実装例が rt_memory.s に収録されています。
この関数は C ライブラリ標準にはありませんが、 ARM® C ライブラリでは拡張としてサポートされています。

構文

extern unsigned __rt_heap_extend(unsigned size, void **block);

使用法

呼び出し規則は通常の AAPCS に準じます。エントリ時、r0 は追加されるブロックの最小サイズを保持し、r1 はベースアドレスが保存される場所を指すポインタを保持します。
デフォルトの実装には以下の特性があります。
  • 以下のいずれかの値が返されます。
    • AArch32 状態では、要求されたサイズ以上の 8 バイトの倍数。
    • AArch64 状態では、要求されたサイズ以上の 16 バイトの倍数。
    • 要求を満たせない場合は 0。
  • 返されるベースアドレスは以下で整列されます。
    • AArch32 状態では、8 バイト境界。
    • AArch64 状態では、16 バイト境界。
  • サイズはバイト単位で処理されます。
  • この関数には ARM アーキテクチャ向けプロシージャコール標準(AAPCS)の制約条件のみが適用されます。

戻り値

デフォルトの実装では、十分な空きヒープメモリがある場合にヒープが拡張されます。それが不可能な場合、実装されていれば、__user_heap_extend() が呼び出されます。終了処理では、r0 は取得されたブロックのサイズ、または何も取得されなかった場合は 0 を保持し、エントリ時に r1 が指したメモリ位置にブロックのベースアドレスが保持されます。
関連する概念
1.11.3 スタックポインタの初期化とヒープの上下限
関連する参考文書
4.29 __rt_stackheap_init()
4.50 __user_heap_extend()
4.51 __user_heap_extent()
4.52 __user_setup_stackheap()
関連情報
『Procedure Call Standard for the ARM Architecture』
非機密扱いPDF file icon PDF 版ARM DUI0808CJ
Copyright © 2014, 2015 ARM.All rights reserved.