Максимальный размер массива в 32 битном приложении MAX DIM
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Вообще наверное стоит посмотреть в сторону очереди или malloc + memcpy
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 4989
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Максимальный размер массива в 32 битном приложении MAX DIM
На самом деле не обязательно. В момент определения массива MaxArray должна быть определена. Я конечно не точно написал, MaxArray должен приходить извне. Массивы как-то не кларионовская тема, поэтому и примера у меня нет. Можно посмотреть в libsrc, например, FuzzyClass.Admin писал(а):MaxArray должна быть константой.
We are hard at work… for you.
Максимальный размер массива в 32 битном приложении MAX DIM
хочу массив байтов - те считать файл, провести обработку и записать новый
копаясь в старых исходниках нашел всякие тесты производительности различных драйверов (topspeed clarion итд) в различных режимах
и прочую фигню
той программки не нашел, но нашел переделку из нее - тест CPU - ALU/FPU - помню сравнивал тогда AMD k6-2 c P2
и в нем нашел декларацию:
те комментарии от той программки регрессионного анализа
самое интересно что на CW10 прокатывает:
а вот
array to big
получается массив не может быть больше 4МБ
я-то сразу стал ставить массив в гигабайт и обломался, подумав что ограничение в 65535 (в интерфейсе кстати оно такое и есть)
а как я 300 мег сжирал регрессионным анализом так и не вспомнил.
копаясь в старых исходниках нашел всякие тесты производительности различных драйверов (topspeed clarion итд) в различных режимах
и прочую фигню
той программки не нашел, но нашел переделку из нее - тест CPU - ALU/FPU - помню сравнивал тогда AMD k6-2 c P2
и в нем нашел декларацию:
Код: Выделить всё
AA LONG(0),DIM(1024000) ! вход анализа - исходный реальный массив
CC SREAL(0),DIM(1024000) ! вход анализа - исходный реальный массив
самое интересно что на CW10 прокатывает:
Код: Выделить всё
AC ULONG(0),DIM(1024000),STATIC
AB ULONG(0),DIM(1024000),STATIC
AV byte(0),DIM(4025000),STATIC
Код: Выделить всё
AD long(0),DIM(4025000),STATIC
AB ULONG(0),DIM(2024000),STATIC
получается массив не может быть больше 4МБ
я-то сразу стал ставить массив в гигабайт и обломался, подумав что ограничение в 65535 (в интерфейсе кстати оно такое и есть)
а как я 300 мег сжирал регрессионным анализом так и не вспомнил.
- Дед Пахом
- Старичок
- Сообщения: 3135
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
STRING и есть массив байтов. Объявляй bytearr &STRING и создавай bytearr &= NEW STRING(4000000)
С уважением, ДП
-
- ✯ Ветеран ✯
- Сообщения: 4989
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Максимальный размер массива в 32 битном приложении MAX DIM
С 4 Мегами проблем нет. Товарищ хочет 300 или ещё лучше 1 Гиг. Можно посоветовать BLOB, но работа не тривиальна с этим делом.Дед Пахом писал(а):STRING и есть массив байтов. Объявляй bytearr &STRING и создавай bytearr &= NEW STRING(4000000)
We are hard at work… for you.
- Дед Пахом
- Старичок
- Сообщения: 3135
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
В C10 help написано что
Если бы размерность массива превышала 32 бита, к его элементам нельзя было бы обратиться через array, потому что I тоже 32 бита.In general, there is a limit to size of data objects declared in global, module or local scope: 4MB. The compiler can report different errors depending from the type of data object exceeding this limit. Particularly, arrays with variable dimensions may be of a slightly greater size than 4MB.
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Вот 1 гиг
Код: Выделить всё
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 = 1
memcpy(mem+W#, ADDRESS(buff), 1)
END
! читаем из памяти
LOOP W# = 1 TO msize
buff = 0
memcpy(ADDRESS(buff), mem+W#, 1)
all += buff
END
MESSAGE(all)
free(mem)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Если есть памяти достаточно, можете 10 или 20 таких блоков по 1Gb выделить. Все в ваших руках.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Кстати может через &BYTE и ADDRESS быстрее будет. если так можно. лениво вдаваться.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Ага... и считать в цикле с нуля до msize-1. А то за границу вылезти можно на байтик
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3135
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Что-то я какую-то чушь про биты написал, не проснулся ещё
С уважением, ДП
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Бывает. Сам иногда напишу что то. И тут же удаляю
Ну или остается
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Максимальный размер массива в 32 битном приложении MAX DIM
у меня не получилось
те
Код: Выделить всё
mem = malloc(msize) ! выделение памяти
IF mem = ''
MESSAGE('Insufficient memory available','ERROR',ICON:Hand)
RETURN
END
а далее
Код: Выделить всё
buff = 1
memcpy(mem, ADDRESS(buff), 1)
я что-то не так сделал ?Exception occurred at address 0101BDF4
Exception code C0000005: Access Violation
....
CW10 винда 7-ка 64бита
зы: откопал свою программку с регрессиями - там тоже порции по 4МБ, просто из-за количества массивов сумма получилась приличная
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Максимальный размер массива в 32 битном приложении MAX DIM
Кстати я тут посмотрел еще раз код примера. Не уверен что он правильный.
Никогда не работал с malloc и memcpy и писал на коленке. Извиняюсь.
Никогда не работал с malloc и memcpy и писал на коленке. Извиняюсь.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса