適用範囲:DS-5, RealView Development Suite (RVDS), ARM Developer Suite (ADS)
ADS1.1以前では、コンパイラの内部的な実装の制限により、オブジェクトの最大サイズは8MByteでした。もしこれを超えた場合、コンパイラは次の例に示すように、"Error: C2429E: structure or array too large"というエラーを返します:
/*test.c*/
char arr[10000000000];
...
/*end*/
コマンドライン:armcc -c test.c
"test.c", line 1: Error: C2429E: structure or array too large
大きな配列を生成するためにはmalloc()を使うべきです。もしmalloc()が使えない場合は、アセンブラファイルでSPACEを使用してZIエリアとして配列を定義することもできます。
例:
AREA mymem, DATA, NOINIT, ALIGN=2
array SPACE 100000000
END
そして、ヘッダファイルに配列を以下の様に定義します:
extern int array[];
SPACEディレクティブは、0で埋められたメモリブロックをリザーブします。%はSPACEの同義語です。
この制限はADSv1.2において256MBに、RVCT2.0以降整数の最大値となる4GBに引き上げられました。RVCTv2.x以降では同義のエラーメッセージは以下の通りです:
"Error: #95: array is too large"