为什么flash会消耗不同的内存量来创建数组并创建一个包含数组的类?

use*_*520 2 memory flash memory-management actionscript-3

我正在尝试查找AS3中有多少不同的数据结构消耗内存.

我发现创建一个简单的数组对象消耗76个字节:

var arr:Array = new Array();
trace(getSize(arr));
Run Code Online (Sandbox Code Playgroud)

然而,创建一个包含数组的简单类显示了20个字节:

var t:Testing2 = new Testing2();
trace(getSize(t));
Run Code Online (Sandbox Code Playgroud)

这是这个类的样子:

package {
    import flash.sampler.StackFrame;
    import flash.display.Bitmap;
    import flash.display.Sprite;

    public class Testing2 {

        private var arr:Array;

        public function Testing2() {
            // constructor code
            arr = new Array();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我很困惑.为什么会这样?

Jas*_*ges 7

在这种情况下,getSize()不会对对象中的所有引用求和 - 只有指向类的指针的大小.它是t对象指针的大小.

您的对象内的引用不会反映出来.

例:

trace(getSize(t));      // 12-bytes
trace(getSize(t.arr));  // 32-bytes
Run Code Online (Sandbox Code Playgroud)

这将有助于分析指向相同内存模型的众多实例的大小.

其它实例将包括Bitmaps,BitmapData,和ByteArrays,其getSize()不反映对象实例保留在存储器中.

使用getSize()适用于原始类型,基准测试代码可确定任务的最有效对象.