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

Clarion, Clarion 7

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

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

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

Сообщение 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)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

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

Сообщение Admin »

2015-11-12 16-57-14 Process Explorer - Sysinternals  www.sysinternals.com [SEA-NK sea].png
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
SuperMax
Посетитель
Сообщения: 47
Зарегистрирован: 25 Август 2015, 3:22
Поблагодарили: 2 раза

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

Сообщение SuperMax »

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

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

долго копал в чем затыка, но тк app-шка маленькая - создал новую, перекинул код и в новой все работает прекрасно
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

Столкнулся с аналогичной проблемой: нужно загрузить в память файл на 680 Мб и там его обработать. Clarion 6. Варианты "есть слона по частям" - не катят. Пробовал:
LocalAlloc - удалось зарезервировать 600 Мб;
malloc - 500 Мб;
HeapAlloc - 300 Мб, причем я ему говорю 680, он говорит: ОК, спрашиваю HeapSize - 300.
Попросил коллег-дельфистов: все три варианта без проблем резервируют, сколько скажешь.
Кто-нибудь сталкивался? Как победить?
Спасибо!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

А так?

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

  
  bufsz = 680 * 1024 * 1024
  buf &= NEW STRING(bufsz)
С уважением, ДП
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

С этого начинал. По документации, STRING - 4 Мб. В реальности, влазит в него около 50. Пробую CSTRING.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Constantine писал(а): 05 Июль 2018, 14:56С этого начинал. По документации, STRING - 4 Мб. В реальности, влазит в него около 50. Пробую CSTRING.
Наверно у нас разные кларионы.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Дед Пахом писал(а): 05 Июль 2018, 15:00Наверно у нас разные кларионы.
По ходу разные - я на C10, но не верю, что в C6 такие проблемы.
С уважением, ДП
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

Цитата из HELP 10-ки, в 6-ке то же самое...
STRING
A character string.
Format: A fixed number of bytes.
Size: 4MB
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

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

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

Сообщение Constantine »

Размер-то выделяется, но пишется в него потом только до определенного предела (~50 Мб). Дальше - Access Violation...
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

У меня где-то 800 мег получалось через свой класс Cstr. Дальше падало...
Задача была - закрыть архив обучалки ( обычный zip, менять нельзя ) , чтобы получатель раскриптовал, только получив пароль.
В конце концов стал загружать только начало ( где шапка) - первые мегабайт 10, обработал и положил обработанное назад. Работает вроде...
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

К сожалению, слона нельзя съесть по частям... :-(
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine »

Через CSTRING получилось. :-)
Теперь эту строку в 680 Мб нужно передать функции для обработки.
Прототип: (*STRING,*CSTRING,ULONG,<BYTE>),LONG,PASCAL
Валится при вызове...
Где я торможу?
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

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