![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
Размер массива
Как увеличить максимальный размер массива типа integer ? Просто граница 8192 устанавливаемая редактором не катит. |
|
|
![]()
NETRAT
offline
Опыт:
82,062Активность: |
Код:
NETRAT добавил: попробуй на инициализации set JASS_MAX_ARRAY_SIZE = YOUR SIZE, если не поможет - замени файл common.j своим - с исправленной константой Отредактировано ScorpioT1000, 20.02.2020 в 16:59. |
|
|
![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
Т.е. больше заделать нельзя или можно изменив константу? |
|
|
![]()
NETRAT
offline
Опыт:
82,062Активность: |
Теоретически - если константа есть, значит можно, практически - не пробовал, ибо не было необходимости. Все в кеше, батенька |
|
|
![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
А теоретически как ее заменить на практике ? |
|
|
![]()
zibada
offline
Опыт: отключен
|
да никак ее не изменить.. константа нужна, только чтобы макс. размер можно было считать из скрипта. юзай связку из нескольких массивов, а еще лучше - кэш... |
|
|
![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
Да я с кэшем совершенно не знаком, только знаю что это типа двухмерный массив, и ВСЕ . |
|
|
![]()
zibada
offline
Опыт: отключен
|
там много знать-то не надо =)
например, эмулировать массивы с бесконечными числовыми индексами можно так: Код:
где: my_cool_array - название, выбирается произвольно 31337 - номер элемента (задается строкой, так что возможно, потребуется преобразование I2S) вместо джасса можно использовать обычные триггерные функции Store Integer и Load Integer Value соответственно. в триггер инициализации добавить действия Init Game Cache (имя файла любое), и Set cache = Last Created Game Cache; добавить глобальную переменную cache. вот и все. |
|
|
![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
Я прям все понял, что аш п..пец. |
|
|
![]()
NETRAT
offline
Опыт:
82,062Активность: |
да ну нафиг - там понимать ничего не нужно - это отличный инструмент (мне его иногда нехватает в С) почитай статейки интересные. Кеш - таблица, основная фича в том, что доступ к каждому элементу(полю) осуществляется при помощи строки - то есть типа как массив, в котором вместо индекса - строка, а строку можешь какой угодно задавать, в этом то и прикол, что ограничений нет |
|
|
![]()
exploder
iOS zealot
offline
Опыт:
17,594Активность: |
А как представлен кэш в памяти? И как производится поиск по нему? Имхо это список или очередь... так что можешь себе и в С кэш организовать :) Написать там функций добавления, поиска и удаления... |
|
|
![]()
NETRAT
offline
Опыт:
82,062Активность: |
какой список, расслабься - хеш таблица. Чтобы нормальный хешь индекс реализовать, нужно пару дней посидеть за ним |
|
|
![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
А так это такая фигня. Спасибо, с детства боялся кэша, а теперь понял. |
|
|
![]()
exploder
iOS zealot
offline
Опыт:
17,594Активность: |
Цитата:
Ну список - отчасти :) Ведь элементы занимающие одну ячейку в хэш-таблице, набиты в связный список... |
|
|
|
![]()
zibada
offline
Опыт: отключен
|
в результате некоторых собственных наблюдений могу предположить, что в варике используется открытое хэширование, а не списки.
то есть элементы, имеющие один хэш, размещаются в последовательных ячейках таблицы.
очевидно, при таком методе число записей ограничено; как только происходит переполнение, таблица пересоздается с использованием большего числа ячеек. при этом необходимо заново пересчитывать хэши всех сохраненных элементов на новый размер, что является весьма дорогой по времени операцией. (по сути, это единственная операция, тормоза от которой действительно заметны) на практике проявляется это так - если в игре пачками добавлять новые записи, периодически случаются затыки, продолжительность которых пропорциональна числу записей.
операция модификации имеющейся записи и прочие срабатывают моментально. я же где-то об этом уже писал вроде...
P.S. кстати, в формате MPQ используется такой же механизм; в частности, есть такое понятие как "макс. число файлов в архиве", изменить которое можно только полной пересборкой архива. |
|
|
![]()
Markiz
offline
Опыт:
10,992Активность: |
TONIC
Цитата:
Скорее, особенность, мы экономим время на чтении и модификации, зато тратим больше на добавлении новых записей в кэш. |
|
|
|
![]()
zibada
offline
Опыт: отключен
|
это фича. списки тормозили бы при каждом обращении к элементу при достаточно большом их количестве. а так и чтение, и запись работают практически за время O(1) (т.е. не зависящее от кол-ва элементов), вот только иногда (далеко не при каждом добавлении!) случается дорогая операция перестройки... но если число элементов не исчисляется десятками-сотнями тысяч, даже это будет практически незаметно. |
|
|
![]()
exploder
iOS zealot
offline
Опыт:
17,594Активность: |
У способа есть свои плюсы и минусы... |
|
|
![]()
Iron
Листовой
offline
Опыт:
23,587Активность: |
DimonT Получается если кэш использовать в виде неограниченого массива (а мне нужно 40000 элементов (хотя конечно не знаю потянет ли оператива), то начнутся жуткие лаги при его заполнении.
|
|
|
![]()
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
При перестройке на больший объём. Тоесть, как я понял будет единовременный затык. потом всё опять Ок. ЗЫ - можно поинтересоваться, как ты собрался использовать в Варе 40000 элементов? |
|
|