查看: 525  |  回复: 0
  VB6 如何节约内存?Dim定义到过程当局部变量与全局的区别 Dim a(100000000) As String
楼主
发表于 2023年11月30日 22:07

新建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 看变量地址》。

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com