1.5. メモリ管理

Pia に渡すメモリ

Pia 全体の動作には Pia ワークメモリが必要です。Pia ワークメモリは十分な量をアプリケーションが明示的に供給する必要があります。

Pia へのメモリ供給は nn::pia::common::Initialize() によって行われます。この関数の引数は順に、メモリブロック先頭へのポインタ、そのメモリブロックのサイズです。ここで供給したメモリは PiaCommon 以外のモジュールからも利用されます。

コード 1-3. Pia の初期化とメモリの供給
// 十分に大きなサイズを与える必要があります。
// 後でより適切な値に修正することも可能です。
const uint32_t MemorySize = 1024 * 1024;

PIA_ATTRIBUTE_ALIGN(8) static uint8_t s_memory[MemorySize];
nn::pia::Result nn::pia::common::Initialize(s_memory, MemorySize);

 

Pia が消費したメモリ量を厳密に取得したい場合

アプリケーションの Pia 使用状況に応じて、Pia の動作に必要最小限なメモリ量を取得できる仕組みを用意しています。

Pia の消費メモリ量を取得するには nn::pia::common::GetMemoryUsage() 関数を用います。この関数はアプリケーションが必要とする各モジュールの EndSetup() 直後に呼ぶ必要があります。呼び出し時点で Pia が消費した正味のメモリ量を返します。最後のモジュールの EndSetup() 直後の GetMemoryUsage() の値を参考にして、 nn::pia::common::Initialize() で供給するメモリ量を調節することができます。

アプリケーション開発の序盤から中盤では、この関数呼び出しで得られた値+余裕分のメモリ量を nn::pia::common::Initialize() で設定しておき、開発終盤では Pia のメモリ使用量ぎりぎりに設定するといったこともできます。

 

コード 1-4. Pia が消費したメモリ量の取得
// ここで取得したメモリ量を下回らないだけのメモリを nn::pia::common::Initialize() で
// 供給する必要があります。
uint32_t usage = nn::pia::common::GetMemoryUsage();