Страницы: 1
RSS
Насколько бесконечный массив VBA
 
Добрый день.

Где предел измерения массива? К примеру, прокрутит ли он 1 млрд строк?
 
Hellmaster, У Вас есть шанс попробовать, но зачем?
По вопросам из тем форума, личку не читаю.
 
БМВ, мало ли, заведу себе базу на 1 млрд строк и решу прокрутить ее полностью) Ну а вообще, есть предел у массива?
 
есть несколько ограничений
1. каждая размерность ограничена максимальным индексом = 2^31-1 = чуть больше 2 млрд.
2. в зависимости от данных хранящихся в массиве он может не поместиться в доступный обьем оперативной памяти
читайте у Microsoft в главе Array Size  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, спасибо!
 
С точностью до 20% (выполнять на "чистом" Excel):
Код
Sub test()
  Dim arr() As Byte, n As Double
  On Error Resume Next
  n = 1000
  Do While True
    Err.Clear
    n = Fix(n * 1.1)
    Erase arr
    ReDim arr(1 To n, 1 To n)
    If Err.Number Then Exit Do
  Loop
    
  MsgBox "Ошибка при распределении массива размером " & FormatNumber(n * n, groupdigits:=vbTrue) & " байт"
End Sub

Попробовал на 2 конфигурациях: вылетает при размере 2466 MB (32-) и 4368 MB (64-)
Изменено: sokol92 - 23.10.2019 20:49:19
Владимир
 
Цитата
sokol92 написал:
С точностью до 20%
Добрый вечер, Владимир.
Похоже всё несколько проще. В Excel 365 64 бит сработали следующие объявления
Код
Public Sub testArraySize()
    Dim byteArray() As Byte, dblArray() As Double
    Dim intArray() As Integer, lngArray() As Long
    
    ReDim byteArray(1 To 2 ^ 31 - 1)
    ReDim intArray(1 To 2 ^ 31 - 1)
    ReDim lngArray(1 To 2 ^ 30 - 1)
    ReDim dblArray(1 To 2 ^ 29 - 1)
End Sub

Судя по всему, VBA не может создать массив, занимающий в памяти больше 4 294 967 292 байт. Перестановка порядка создания массивов на появление Out of memory не влияет.
Изменено: Андрей VG - 23.10.2019 20:49:07
 
Здравствуйте, Андрей! Да, похоже. На 32-разрядных системах улетает раньше.
Владимир
Страницы: 1
Наверх