Страница 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
2015-11-12 16-57-14 Process Explorer - Sysinternals  www.sysinternals.com [SEA-NK sea].png

Максимальный размер массива в 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>)