Страница 3 из 4
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 12 Ноябрь 2015, 9:40
Admin
Вот чутка поменьше код и побыстрее. Проверил на Windows 7, Clarion 10. результат дает.
В процесс эксплорере показывает что прилада берет гиг памяти. И если в конце поставить месаг после фрии - видно что освобождает.
Не знаю что еще сказать.
Код: Выделить всё
PROGRAM
MAP
module('runtime')
malloc(signed),long,name('_malloc')
free(long),name('_free')
memcpy(Long,Long,Unsigned),Name('_memcpy')
end
END
msize long(1024*1024*1024)
mem long
buff &byte
all long
CODE
mem = malloc(msize)
! пишем в память
LOOP W# = 1 TO msize
buff &= (mem+W#-1)
buff = 1
END
! читаем из памяти
LOOP W# = 1 TO msize
buff &= (mem+W#-1)
all += buff
END
MESSAGE(all)
free(mem)
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 12 Ноябрь 2015, 9:57
Admin
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 12 Ноябрь 2015, 10:50
SuperMax
вопрос снимается
все работает - спецом собрал примеры
но вот при внедрении в свое приложение я на что-то наступил Ж(
долго копал в чем затыка, но тк app-шка маленькая - создал новую, перекинул код и в новой все работает прекрасно
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 13:29
Constantine
Столкнулся с аналогичной проблемой: нужно загрузить в память файл на 680 Мб и там его обработать. Clarion 6. Варианты "есть слона по частям" - не катят. Пробовал:
LocalAlloc - удалось зарезервировать 600 Мб;
malloc - 500 Мб;
HeapAlloc - 300 Мб, причем я ему говорю 680, он говорит: ОК, спрашиваю HeapSize - 300.
Попросил коллег-дельфистов: все три варианта без проблем резервируют, сколько скажешь.
Кто-нибудь сталкивался? Как победить?
Спасибо!
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 14:33
Дед Пахом
А так?
Код: Выделить всё
bufsz = 680 * 1024 * 1024
buf &= NEW STRING(bufsz)
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 14:56
Constantine
С этого начинал. По документации, STRING - 4 Мб. В реальности, влазит в него около 50. Пробую CSTRING.
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 15:00
Дед Пахом
Constantine писал(а): ↑05 Июль 2018, 14:56С этого начинал. По документации, STRING - 4 Мб. В реальности, влазит в него около 50. Пробую CSTRING.
Наверно у нас разные кларионы.
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 15:06
Дед Пахом
Дед Пахом писал(а): ↑05 Июль 2018, 15:00Наверно у нас разные кларионы.
По ходу разные - я на C10, но не верю, что в C6 такие проблемы.
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 15:10
Constantine
Цитата из HELP 10-ки, в 6-ке то же самое...
STRING
A character string.
Format: A fixed number of bytes.
Size: 4MB
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 15:22
Дед Пахом
Constantine писал(а): ↑05 Июль 2018, 15:10Цитата из HELP 10-ки, в 6-ке то же самое..
Это если STRING, а &STRING можно любой размер выделить по NEW.
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 15:24
Constantine
Размер-то выделяется, но пишется в него потом только до определенного предела (~50 Мб). Дальше - Access Violation...
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 15:37
Yufil
У меня где-то 800 мег получалось через свой класс Cstr. Дальше падало...
Задача была - закрыть архив обучалки ( обычный zip, менять нельзя ) , чтобы получатель раскриптовал, только получив пароль.
В конце концов стал загружать только начало ( где шапка) - первые мегабайт 10, обработал и положил обработанное назад. Работает вроде...
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 16:02
Constantine
К сожалению, слона нельзя съесть по частям...
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 16:48
Constantine
Через CSTRING получилось.
Теперь эту строку в 680 Мб нужно передать функции для обработки.
Прототип: (*STRING,*CSTRING,ULONG,<BYTE>),LONG,PASCAL
Валится при вызове...
Где я торможу?
Максимальный размер массива в 32 битном приложении MAX DIM
Добавлено: 05 Июль 2018, 16:56
Дед Пахом
Constantine писал(а): ↑05 Июль 2018, 16:48Прототип: (*STRING,*CSTRING,ULONG,<BYTE>),LONG,PASCAL
Функция обработки на C или Delphi? Первый параметр лучше передавать по адресу: (LONG,*CSTRING,ULONG,<BYTE>)