Максимальный размер массива в 32 битном приложении MAX DIM

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Admin
Администратор
Сообщения: 3373
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Admin » 12 Ноябрь 2015, 9:40

Вот чутка поменьше код и побыстрее. Проверил на 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)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
Admin
Администратор
Сообщения: 3373
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Admin » 12 Ноябрь 2015, 9:57

2015-11-12 16-57-14 Process Explorer - Sysinternals  www.sysinternals.com [SEA-NK sea].png
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

SuperMax
Посетитель
Сообщения: 42
Зарегистрирован: 25 Август 2015, 3:22

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение SuperMax » 12 Ноябрь 2015, 10:50

вопрос снимается
все работает - спецом собрал примеры

но вот при внедрении в свое приложение я на что-то наступил Ж(

долго копал в чем затыка, но тк app-шка маленькая - создал новую, перекинул код и в новой все работает прекрасно

Constantine
Бывалый
Сообщения: 90
Зарегистрирован: 07 Февраль 2017, 16:58

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Constantine » 05 Июль 2018, 13:29

Столкнулся с аналогичной проблемой: нужно загрузить в память файл на 680 Мб и там его обработать. Clarion 6. Варианты "есть слона по частям" - не катят. Пробовал:
LocalAlloc - удалось зарезервировать 600 Мб;
malloc - 500 Мб;
HeapAlloc - 300 Мб, причем я ему говорю 680, он говорит: ОК, спрашиваю HeapSize - 300.
Попросил коллег-дельфистов: все три варианта без проблем резервируют, сколько скажешь.
Кто-нибудь сталкивался? Как победить?
Спасибо!

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2229
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Дед Пахом » 05 Июль 2018, 14:33

А так?

Код: Выделить всё

  
  bufsz = 680 * 1024 * 1024
  buf &= NEW STRING(bufsz)
С уважением, ДП

Constantine
Бывалый
Сообщения: 90
Зарегистрирован: 07 Февраль 2017, 16:58

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Constantine » 05 Июль 2018, 14:56

С этого начинал. По документации, STRING - 4 Мб. В реальности, влазит в него около 50. Пробую CSTRING.

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2229
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Дед Пахом » 05 Июль 2018, 15:00

Constantine писал(а):
05 Июль 2018, 14:56
С этого начинал. По документации, STRING - 4 Мб. В реальности, влазит в него около 50. Пробую CSTRING.
Наверно у нас разные кларионы.
С уважением, ДП

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2229
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Дед Пахом » 05 Июль 2018, 15:06

Дед Пахом писал(а):
05 Июль 2018, 15:00
Наверно у нас разные кларионы.
По ходу разные - я на C10, но не верю, что в C6 такие проблемы.
С уважением, ДП

Constantine
Бывалый
Сообщения: 90
Зарегистрирован: 07 Февраль 2017, 16:58

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Constantine » 05 Июль 2018, 15:10

Цитата из HELP 10-ки, в 6-ке то же самое...
STRING
A character string.
Format: A fixed number of bytes.
Size: 4MB

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2229
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Дед Пахом » 05 Июль 2018, 15:22

Constantine писал(а):
05 Июль 2018, 15:10
Цитата из HELP 10-ки, в 6-ке то же самое..
Это если STRING, а &STRING можно любой размер выделить по NEW.
С уважением, ДП

Constantine
Бывалый
Сообщения: 90
Зарегистрирован: 07 Февраль 2017, 16:58

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Constantine » 05 Июль 2018, 15:24

Размер-то выделяется, но пишется в него потом только до определенного предела (~50 Мб). Дальше - Access Violation...

Yufil
Ветеран движения
Сообщения: 1091
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Yufil » 05 Июль 2018, 15:37

У меня где-то 800 мег получалось через свой класс Cstr. Дальше падало...
Задача была - закрыть архив обучалки ( обычный zip, менять нельзя ) , чтобы получатель раскриптовал, только получив пароль.
В конце концов стал загружать только начало ( где шапка) - первые мегабайт 10, обработал и положил обработанное назад. Работает вроде...

Constantine
Бывалый
Сообщения: 90
Зарегистрирован: 07 Февраль 2017, 16:58

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Constantine » 05 Июль 2018, 16:02

К сожалению, слона нельзя съесть по частям... :-(

Constantine
Бывалый
Сообщения: 90
Зарегистрирован: 07 Февраль 2017, 16:58

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Constantine » 05 Июль 2018, 16:48

Через CSTRING получилось. :-)
Теперь эту строку в 680 Мб нужно передать функции для обработки.
Прототип: (*STRING,*CSTRING,ULONG,<BYTE>),LONG,PASCAL
Валится при вызове...
Где я торможу?

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2229
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Максимальный размер массива в 32 битном приложении MAX DIM

Сообщение Дед Пахом » 05 Июль 2018, 16:56

Constantine писал(а):
05 Июль 2018, 16:48
Прототип: (*STRING,*CSTRING,ULONG,<BYTE>),LONG,PASCAL
Функция обработки на C или Delphi? Первый параметр лучше передавать по адресу: (LONG,*CSTRING,ULONG,<BYTE>)
С уважением, ДП

Ответить