[AS3] プリミティブ型データとメモリ [Edit]

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

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事