Adobeのサイトに公開された「Optimizing Performance for the Flash Platform」の「Primitive types」の項は、ActionScript 3.0におけるプリミティブ型データについて、とくにメモリ上の扱いを説明しています。細かい話題ではあるものの、メモ代わりにまとめます。
String型以外のプリミティブ型データは、4ないし8バイトのメモリを使います。指定するデータ型によって、プリミティブ型データの使用メモリを最適化することはできません(処理のバイトコードは最適化が考えられます)。プリミティブ型データの初期値とその使用メモリは、次表001のとおりです。
表001■プリミティブ型データの初期値と使用メモリデータ型 | 初期値 | 使用メモリ | 備考 |
Number | NaN | 8 | 64ビット浮動小数点数 |
int | 0 | 4 | 32ビット符号付き整数 |
uint | 0 | 4 | 32ビット符号なし整数 |
Boolean | false | 4 | |
String | null | 4 | 可変長16ビット文字列 |
前掲のAdobeのドキュメントを参考にして、getSize()関数によりプリミティブ型データが使うメモリのバイト数について調べてみます。
//【Number型】
var n:Number;
trace(getSize(n), n); // 出力: 8 NaN
n = Math.pow(2, 28) - 1;
trace(getSize(n), n); // 出力: 4 268435455
n = Math.pow(2, 28);
trace(getSize(n), n); // 出力: 8 268435456
n = Number.MAX_VALUE;
trace(getSize(n), n); // 出力: 8 1.79769313486231e+308
n = 0.1;
trace(getSize(n), n); // 出力: 8 0.1
//【int型】
var i:int;
trace(getSize(i), i); // 出力: 4 0
i = Math.pow(2,28) - 1;
trace(getSize(i), i); // 出力: 4 268435455
i = Math.pow(2,28);
trace(getSize(i), i); // 出力: 8 268435456
i = Math.pow(2, 31) - 1;
trace(getSize(i), i); // 出力: 8 2147483647
//【String型】 var _str:String;
trace(getSize(_str), _str); // 出力: 4 null
_str = "";
trace(getSize(_str)); // 出力: 24
_str = "a";
trace(getSize(_str)); // 出力: 26
_str = "あい";
trace(getSize(_str)); // 出力: 28
_str = "使われるバイト数は「24 + 2×文字列の長さ」";
trace(getSize(_str), 24 + 2 * _str.length); // 出力: 72 72