数组占用内存

jeanscjx 2006-06-10 03:52:17
若用as定义如下两个数组:

var arr1_array:Array=new Array();
arr1_array[0]=0;
arr1_array[1]=1;
……
arr1_array[9]=10;



var arr2_array:Array=new Array();
arr2_array[1077777]=0;
arr2_array[1077778]=1;
……
arr2_array[1077786]=1;


arr1_array和arr2_array中真正有用的元素都只有10个,但arr1_array.length和arr2_array.length相差很大,这样的话,它们所占用的内存有区别吗?arr2_array占用内存比arr1_array多,还是一样多?


不光是内存占用,其他方面有区别吗?


谢谢^_^
...全文
302 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomantoubaba 2006-06-11
  • 打赏
  • 举报
回复
数组扩倍是JAVA里头的说法,

我们从C说起。假设你需要一个数组,那么你一定要事先定义这个数组的大小。

比如说你定义了这个数组大小为100,但是实际上你有102个元素需要存储,哇塞,你疯了,因为你的数组装不下。或者说你只有2个元素,那么你就浪费了98个存储单元。哇塞,计算机疯了。

这并不是一个很爽的事情。如果说元素的个数是变化的,就是说我们并不知道有多少个元素,那么你就没办法定义数组的大小了,因为你不知道应该定义多大。这也是为什么在C里头有人喜欢链表的原因之一。

我们再来谈这个扩倍。
ArrayList的实现是这样的,一开始你定义数组大小为1,只能存一个元素。结果你发现你的元素不止那么多,那么你会把数组扩大一倍,就成了2了,结果你又发现不够,现在你再继续扩大数组,就成了4了,一直下去8--16--32--64....
这就是数组扩倍。

我不大记得了,大约是这么个情形。有可能说错了,N久没看数据结构了,说错了请原谅,回头看看书去,我们再讨论这个问题。

至于实现过程,回头我们再讨论,一下子也写不出来,只记得大体的伪代码。


// ================================ 说个私事 ================================
麻烦你支持我一下,我想当FLASH开发版的斑竹,大版块的的版主还没批准。
jeanscjx 2006-06-11
  • 打赏
  • 举报
回复
谢谢两位^_^

sshcx(大错特错) 的租房例子很形象,顺便问下什么是“数组扩倍”啊?
xiaomantoubaba 2006-06-10
  • 打赏
  • 举报
回复
arr2_array占用的内存要大
现在你的arr1_array在内存中开辟了10个存储单元
arr2_array在内存中开辟了1077787个单元。

尽管arr2_array[0], arr2_array[1]......里面都没有存储数据,但是内存已经分配了,存不存数据是另外一回事。
就象你已经租了100间房子,住1间还是100间是你的事情。100间房租你得照样交。

我不知道Array在AS里头的机制,它有点象Java里头的ArrayList吧,可能底层是采用"数组扩倍"的做法实现分配内存的。
反正就是1077787个连续的存储单元被开辟了。你可以trace它门的length


i三千 2006-06-10
  • 打赏
  • 举报
回复
看你数组中保存的数据多少。

2,275

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 Flash流媒体开发
社区管理员
  • Flash流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧