Iron
Листовой
offline
Опыт:
24,427Активность: |
Размер массива
Как увеличить максимальный размер массива типа integer ? Просто граница 8192 устанавливаемая редактором не катит. |
05.01.2006, 16:12 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Код:
NETRAT добавил: попробуй на инициализации set JASS_MAX_ARRAY_SIZE = YOUR SIZE, если не поможет - замени файл common.j своим - с исправленной константой Отредактировано ScorpioT1000, 20.02.2020 в 16:59. |
05.01.2006, 17:06 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
Т.е. больше заделать нельзя или можно изменив константу? |
05.01.2006, 17:07 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Теоретически - если константа есть, значит можно, практически - не пробовал, ибо не было необходимости. Все в кеше, батенька |
05.01.2006, 17:13 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
А теоретически как ее заменить на практике ? |
05.01.2006, 17:17 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
да никак ее не изменить.. константа нужна, только чтобы макс. размер можно было считать из скрипта. юзай связку из нескольких массивов, а еще лучше - кэш... |
05.01.2006, 17:21 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
Да я с кэшем совершенно не знаком, только знаю что это типа двухмерный массив, и ВСЕ . |
05.01.2006, 17:38 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
там много знать-то не надо =)
например, эмулировать массивы с бесконечными числовыми индексами можно так: Код:
где: 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 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
Я прям все понял, что аш п..пец. |
05.01.2006, 17:50 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
да ну нафиг - там понимать ничего не нужно - это отличный инструмент (мне его иногда нехватает в С) почитай статейки интересные. Кеш - таблица, основная фича в том, что доступ к каждому элементу(полю) осуществляется при помощи строки - то есть типа как массив, в котором вместо индекса - строка, а строку можешь какой угодно задавать, в этом то и прикол, что ограничений нет |
05.01.2006, 18:08 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
А как представлен кэш в памяти? И как производится поиск по нему? Имхо это список или очередь... так что можешь себе и в С кэш организовать :) Написать там функций добавления, поиска и удаления... |
05.01.2006, 18:36 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
какой список, расслабься - хеш таблица. Чтобы нормальный хешь индекс реализовать, нужно пару дней посидеть за ним |
05.01.2006, 18:40 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
А так это такая фигня. Спасибо, с детства боялся кэша, а теперь понял. |
05.01.2006, 18:57 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Ну список - отчасти :) Ведь элементы занимающие одну ячейку в хэш-таблице, набиты в связный список... |
|
05.01.2006, 19:18 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
в результате некоторых собственных наблюдений могу предположить, что в варике используется открытое хэширование, а не списки.
то есть элементы, имеющие один хэш, размещаются в последовательных ячейках таблицы.
очевидно, при таком методе число записей ограничено; как только происходит переполнение, таблица пересоздается с использованием большего числа ячеек. при этом необходимо заново пересчитывать хэши всех сохраненных элементов на новый размер, что является весьма дорогой по времени операцией. (по сути, это единственная операция, тормоза от которой действительно заметны) на практике проявляется это так - если в игре пачками добавлять новые записи, периодически случаются затыки, продолжительность которых пропорциональна числу записей.
операция модификации имеющейся записи и прочие срабатывают моментально. я же где-то об этом уже писал вроде...
P.S. кстати, в формате MPQ используется такой же механизм; в частности, есть такое понятие как "макс. число файлов в архиве", изменить которое можно только полной пересборкой архива. |
05.01.2006, 19:39 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
TONIC
Цитата:
Скорее, особенность, мы экономим время на чтении и модификации, зато тратим больше на добавлении новых записей в кэш. |
|
05.01.2006, 20:01 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
zibada
offline
Опыт: отключен
|
это фича. списки тормозили бы при каждом обращении к элементу при достаточно большом их количестве. а так и чтение, и запись работают практически за время O(1) (т.е. не зависящее от кол-ва элементов), вот только иногда (далеко не при каждом добавлении!) случается дорогая операция перестройки... но если число элементов не исчисляется десятками-сотнями тысяч, даже это будет практически незаметно. |
05.01.2006, 20:02 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
У способа есть свои плюсы и минусы... |
05.01.2006, 20:04 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
24,427Активность: |
DimonT Получается если кэш использовать в виде неограниченого массива (а мне нужно 40000 элементов (хотя конечно не знаю потянет ли оператива), то начнутся жуткие лаги при его заполнении.
|
06.01.2006, 10:37 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
При перестройке на больший объём. Тоесть, как я понял будет единовременный затык. потом всё опять Ок. ЗЫ - можно поинтересоваться, как ты собрался использовать в Варе 40000 элементов? |
06.01.2006, 11:59 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|