新建From1(窗体),新建Command1(按钮CommandButton),代码:
Private Sub Command1_Click()
Dim a(100000000) As String
Stop
End Sub
运行到Stop停止,你会发现你计算机的内存从28MB变成409MB,当运行过Stop后,又恢复到了28MB。
如果我们把Dim a(100000000) As String放到窗口第一行或作为全局变量,那么一样看到使用了409MB内存。看来退出过程后会自动销毁使用的内存。
我们现在来测试数组是如何放入内存的,占几个字节:
Dim a(100000000) As String
放在全局里面,占用410MB内存。
Dim a(100000000) As String * 1
*1,占用219MB内存。
Dim a(100000000) As String * 2
*2,占用410MB内存。
*3,显示溢出。
看来可变字符串数组每项占用2个字节的内存,可能是放的内存地址进去。
程序退出后,内存恢复到程序开始前的大小,所以不用删除变量。
结果:看来如果有大量内存数组,建议还是采用可变字符串,这样CPU可以根据内存碎片安排内存地址。猜想:如果碎片地址后面是00 00这种情况,可以直接延伸字符串,如果地址不足,则换新的内存地址,修改字符串指针。
关于内存的文章,请看《VB6 计算数据类型占用内存大小(占几个字节)隐藏函数 VarPtr StrPtr 看变量地址》。