概要
32ビットのArm コアArm コアは、4GBのシーケンシャルメモリ(範囲は0x0~0xFFFF'FFFF)を持っています。64ビットのArm コアは、16TBのシーケンシャルメモリ(範囲は0x0~0xFFFF'FFFF'FFFF'FFFF)を持っています。メモリ範囲には、さまざまな種類の物理メモリを設置できます。一般的な用途では、リードオンリーメモリ(ROM)とリード/ライトメモリ(RAM)の両方を使用します。また、メモリ範囲の一部に、プロセッサが管理するレジスタや周辺ユニットが含まれます。
さまざまなデータ記憶方法
一般的な用途では、データを以下の3種類の方法でメモリに格納できます。
自動変数
staticとして宣言された変数を除き、関数にローカルな変数はすべて、レジスタまたはスタックに格納されます。これらの変数は、関数の実行中にアクセスが可能です。関数が呼び出し元に戻ると、このメモリ空間は無効になります。詳細については、自動変数とパラメータの記憶領域を参照してください。
グローバル変数、モジュール静的変数、static と宣言されたローカル変数
この場合、メモリは1度だけ割り当てられます。ここでのstaticとは、このタイプの変数に割り当てられたメモリ容量がアプリケーション実行中に変化しないことを意味します。Arm コアには、単一アドレス空間があり、コンパイラはフルメモリアドレッシングをサポートします。
アプリケーションは、データをヒープ上に割り当てることができます。この場合、アプリケーションが明示的にヒープをシステムに解放するまでデータは有効な状態で保持されます。このタイプのメモリは、アプリケーションを実行するまで必要なオブジェクト量がわからない場合に便利です。
注: 動的に割り当てられたデータを、メモリ容量が限られているシステムや、長期間実行するシステムで使用すると、問題が生じる危険性があります。詳細については、ヒープ上の動的メモリを参照してください。