XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Iron
Листовой
offline
Опыт: 24,427
Активность:
Размер массива
Как увеличить максимальный размер массива типа integer ? Просто граница 8192 устанавливаемая редактором не катит.
Старый 05.01.2006, 16:12
NETRAT

offline
Опыт: 83,712
Активность:
Код:
constant integer JASS_MAX_ARRAY_SIZE = 8192


NETRAT добавил:
попробуй на инициализации set JASS_MAX_ARRAY_SIZE = YOUR SIZE, если не поможет - замени файл common.j своим - с исправленной константой

Отредактировано ScorpioT1000, 20.02.2020 в 16:59.
Старый 05.01.2006, 17:06
Iron
Листовой
offline
Опыт: 24,427
Активность:
Т.е. больше заделать нельзя или можно изменив константу?
Старый 05.01.2006, 17:07
NETRAT

offline
Опыт: 83,712
Активность:
Теоретически - если константа есть, значит можно, практически - не пробовал, ибо не было необходимости. Все в кеше, батенька
Старый 05.01.2006, 17:13
Iron
Листовой
offline
Опыт: 24,427
Активность:
А теоретически как ее заменить на практике ?
Старый 05.01.2006, 17:17
zibada

offline
Опыт: отключен
да никак ее не изменить.. константа нужна, только чтобы макс. размер можно было считать из скрипта.
юзай связку из нескольких массивов, а еще лучше - кэш...
Старый 05.01.2006, 17:21
Iron
Листовой
offline
Опыт: 24,427
Активность:
Да я с кэшем совершенно не знаком, только знаю что это типа двухмерный массив, и ВСЕ .
Старый 05.01.2006, 17:38
zibada

offline
Опыт: отключен
там много знать-то не надо =)

например, эмулировать массивы с бесконечными числовыми индексами можно так:
Код:
StoreInteger(udg_cache, "my_cool_array", "31337", 10); // запись
set x = GetStoredInteger(udg_cache, "my_cool_array", "31337"); // чтение

где:
my_cool_array - название, выбирается произвольно
31337 - номер элемента (задается строкой, так что возможно, потребуется преобразование I2S)
вместо джасса можно использовать обычные триггерные функции Store Integer и Load Integer Value соответственно.

в триггер инициализации добавить действия Init Game Cache (имя файла любое), и Set cache = Last Created Game Cache; добавить глобальную переменную cache.
вот и все.
Старый 05.01.2006, 17:47
Iron
Листовой
offline
Опыт: 24,427
Активность:
Я прям все понял, что аш п..пец.
Старый 05.01.2006, 17:50
NETRAT

offline
Опыт: 83,712
Активность:
да ну нафиг - там понимать ничего не нужно - это отличный инструмент (мне его иногда нехватает в С)
почитай статейки интересные. Кеш - таблица, основная фича в том, что доступ к каждому элементу(полю) осуществляется при помощи строки - то есть типа как массив, в котором вместо индекса - строка, а строку можешь какой угодно задавать, в этом то и прикол, что ограничений нет
Старый 05.01.2006, 18:08
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
А как представлен кэш в памяти? И как производится поиск по нему? Имхо это список или очередь... так что можешь себе и в С кэш организовать :) Написать там функций добавления, поиска и удаления...
Старый 05.01.2006, 18:36
NETRAT

offline
Опыт: 83,712
Активность:
какой список, расслабься - хеш таблица. Чтобы нормальный хешь индекс реализовать, нужно пару дней посидеть за ним
Старый 05.01.2006, 18:40
Iron
Листовой
offline
Опыт: 24,427
Активность:
А так это такая фигня. Спасибо, с детства боялся кэша, а теперь понял.
Старый 05.01.2006, 18:57
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
список

Ну список - отчасти :) Ведь элементы занимающие одну ячейку в хэш-таблице, набиты в связный список...
Старый 05.01.2006, 19:18
zibada

offline
Опыт: отключен
в результате некоторых собственных наблюдений могу предположить, что в варике используется открытое хэширование, а не списки.
то есть элементы, имеющие один хэш, размещаются в последовательных ячейках таблицы.
очевидно, при таком методе число записей ограничено; как только происходит переполнение, таблица пересоздается с использованием большего числа ячеек.
при этом необходимо заново пересчитывать хэши всех сохраненных элементов на новый размер, что является весьма дорогой по времени операцией.
(по сути, это единственная операция, тормоза от которой действительно заметны)
на практике проявляется это так - если в игре пачками добавлять новые записи, периодически случаются затыки, продолжительность которых пропорциональна числу записей.
операция модификации имеющейся записи и прочие срабатывают моментально.
я же где-то об этом уже писал вроде...
P.S. кстати, в формате MPQ используется такой же механизм; в частности, есть такое понятие как "макс. число файлов в архиве", изменить которое можно только полной пересборкой архива.
Старый 05.01.2006, 19:39
Markiz

offline
Опыт: 11,432
Активность:
TONIC
Цитата:
то есть это недостаток архитектуры или как?

Скорее, особенность, мы экономим время на чтении и модификации, зато тратим больше на добавлении новых записей в кэш.
Старый 05.01.2006, 20:01
zibada

offline
Опыт: отключен
это фича.
списки тормозили бы при каждом обращении к элементу при достаточно большом их количестве.
а так и чтение, и запись работают практически за время O(1) (т.е. не зависящее от кол-ва элементов), вот только иногда (далеко не при каждом добавлении!) случается дорогая операция перестройки...
но если число элементов не исчисляется десятками-сотнями тысяч, даже это будет практически незаметно.
Старый 05.01.2006, 20:02
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
У способа есть свои плюсы и минусы...
Старый 05.01.2006, 20:04
Iron
Листовой
offline
Опыт: 24,427
Активность:
DimonT Получается если кэш использовать в виде неограниченого массива (а мне нужно 40000 элементов (хотя конечно не знаю потянет ли оператива), то начнутся жуткие лаги при его заполнении.
Старый 06.01.2006, 10:37
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
При перестройке на больший объём. Тоесть, как я понял будет единовременный затык. потом всё опять Ок.
ЗЫ - можно поинтересоваться, как ты собрался использовать в Варе 40000 элементов?
Старый 06.01.2006, 11:59
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:01.