VBA Excel 2010阵列大小限制

时间:2016-10-03 14:05:57

标签: arrays vba excel-vba excel

我最近需要在VBA Excel 2010中使用相当大的数组执行计算。然而,令我沮丧的是,我的计算机在工作和家中(一台是PC而另一台是Mac(PC有) 8GB的RAM和Mac有4GB)),当我尝试运行我的程序时,继续抛出相同的Out of Memory错误。这使我开始进行一些测试以找到问题的根源。

Sub Test1()
    Dim arr1() As Byte, arr2() As Long

    ReDim arr1(1 To 268000000)  ''These work
    ReDim arr2(1 To 268000000)
End Sub

Sub Test2()
    Dim arr3() As Byte, arr4() As Long

    ReDim arr3(1 To 269000000)  '' Both of these fail
    ReDim arr4(1 To 269000000)
End Sub

现在,根据MSDN,每个维度的索引都受(2 ^ 31) - 1限制。正如您在上面所看到的那样,我远未接近{1}}。根据一些原始计算,上面每个阵列的内存量是:

2^28

您会注意到arr1: 268,000,000 * 1 = 268,000,000 bytes of memory arr2: 268,000,000 * 8 = 2,144,000,000 bytes of memory arr3: 269,000,000 * 1 = 269,000,000 bytes of memory arr4: 269,000,000 * 8 = 2,152,000,000 bytes of memory 大约arr3大小1/8th,但在尝试arr2时,我们会在Redim arr3时遇到内存不足错误完美无缺。这里发生了什么?应该注意的是this post虽然相似但不适用,因为我在两台机器上都有足够的内存,并且只是简单地询问内存而不是一个可以放入数组的元素。

0 个答案:

没有答案