Страница: 1 |
Страница: 1 |
Вопрос: Массивы (Недостаточно памяти)
Добавлено: 06.07.07 02:05
Автор вопроса: Wolf4D | Web-сайт:
Я работаю в VB6. Создаю 7 массивов (один двумерный, остальные одномерные - за исключением одного пятимерного).
И при попытке создать ещё один массив VB6 заявляет, что ему не хватает памяти - хотя в системе 1GB оперативки и нехилый файл подкачки. Вот такой вопрос - почему игре S.T.A.L.K.E.R. хватает памяти, а моей простенькой программе нет?
P.S. Заметил, что во время попытки выполнения программы остаётся порядка 400mb оперативки свободных. Может, VB6 просто не может адресовать столько?
Можно ли это как-то побороть?
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 06.07.07 05:01
Адресовать VB может всю доступную приложению память. Но при исполнении процедуры (включая вложенные) для объявленных в ней переменных выделяется память размером < ~1MB (не помню точно, может больше, поправьте).
Вот в этих пределах, представь себе, и надо строить всю логику программы.
И если до завершения процедуры эта мелочь будет потрачена, VB грязно выругается: Err 7 или 28.
Решение: динамическое выделение памяти.
Номер ответа: 2
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #2
Добавлено: 06.07.07 05:41
Sorry, что-то я спьяну стек приплел.
Просто перемножь все размерности и длину типов данных. Количество байт не должно превышать физическую память.
Номер ответа: 3
Автор ответа:
astoro
ICQ: 649109
Вопросов: 31
Ответов: 391
Профиль | | #3
Добавлено: 06.07.07 06:16
покажи как создаешь,
в смысле какие массивы и сколько
вообще странно, я точно помню что создавал нескоклько десятков вариантных массивов, одномерных, длинной по 30000.
и нормально работало на компах с 512 оперативы.
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 06.07.07 08:45
Надо посчитать сколько памяти тебе надо под массив (или несколько массивов), выделить память (см. API по работе с памятью, типа GlobalAlloc, GlobalLock и т.д.) и работать с ней как с массивом (при этом на VB6 тебе прийдется самому вычислять указатель). А вообще проблеммка странная, может у тебе массив объявить как глобальную переменную, массив сделать динамическим?
Номер ответа: 5
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #5
Добавлено: 06.07.07 13:38
в смысле какие массивы и сколько
вообще странно, я точно помню что создавал нескоклько десятков вариантных массивов, одномерных, длинной по 30000.
и нормально работало на компах с 512 оперативы.
Создаю не глобальные массивы в коде формы (вне процедур).
Dim res(2) As Long
Dim freen As Byte
Dim health(255) As Integer
Dim oftype(255) As Byte
Dim side(255) As Byte
Dim att(255) As Integer
Dim siden(255, 25, 100, 5, 5)
Dim t As Integer
Dim c As Byte
Dim timez As Variant
Rem КАКОГО? ЭТО НЕ СОЗДАЁТСЯ! Dim neu(255, 25, 100, 5, 5)
Rem КАКОГО? ЭТО НЕ СОЗДАЁТСЯ! Dim timef(255) As Integer
Попробую.
Номер ответа: 6
Автор ответа:
astoro
ICQ: 649109
Вопросов: 31
Ответов: 391
Профиль | | #6
Добавлено: 06.07.07 14:12
на моем компе тоже памяти не хватило
2Гб
Rem КАКОГО? ЭТО НЕ СОЗДАЁТСЯ! Dim neu(255, 25, 100, 5, 5)
почти 16 млн элементов variant - видимо лишка хватил.
Я пас.
Номер ответа: 7
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #7
Добавлено: 06.07.07 14:16
Dim siden(255, 25, 100, 5, 5) ведь создался...
Видимо. Буду думать над оптимизацией...
Номер ответа: 8
Автор ответа:
Silver Ferrum
ICQ: 422640045
Вопросов: 12
Ответов: 144
Профиль | | #8
Добавлено: 09.07.07 15:15
хЫХ.. я не знаю, что у вас за телеги.. но у меня 768МБ памяти и всё создается.. правда программа хавает 386МБ памяти..
Жестко!