Слышал, что не стоит создавать много хештаблиц, так как это занимает много памяти.
function TimerCallback takes nothing returns nothing
	call InitHashtable( )
endfunction

function Start takes nothing returns nothing
	call TimerStart( CreateTimer( ), 0.010, true, function TimerCallback )
endfunction
Или вес хештаблицы растёт по мере добавления в неё данных? Но тогда в чём проблема большого количества хештаблиц. Ведь что одна хештаблица весом 10, или пять хештаблиц весом по 2. В итога оба варианта весят по 10.

Принятый ответ

Каждый новый хеш-тейбл инициализируется заново и остаётся висеть в оперативке до удаления из скрипта карты или до завершения игры (по крайней мере, мне так помнится). Операции выделения памяти довольно тяжёлые сами по себе, но куда значимее тот факт, что пересоздание и плождение таблиц - абсолютно бессмысленные операции по своей сути, они не несут вообще никакого положительного выхлопа.
0
30
7 лет назад
Отредактирован Clamp
0
Каждый новый хеш-тейбл инициализируется заново и остаётся висеть в оперативке до удаления из скрипта карты или до завершения игры (по крайней мере, мне так помнится). Операции выделения памяти довольно тяжёлые сами по себе, но куда значимее тот факт, что пересоздание и плождение таблиц - абсолютно бессмысленные операции по своей сути, они не несут вообще никакого положительного выхлопа.
Принятый ответ
0
32
7 лет назад
0
Зачем вам 10 хештаблиц? Все прекрасно влазит в 1.
0
16
7 лет назад
0
Забавный факт - хештаблица генерируется в момент выделения карты в лобби, а не при загрузке или исполнении скрипта. Точнее, сперва при проверке синтаксиса, а затем - когда жмется "старт". А обычный скрипт выполняется примерно после середины полосы загрузки.
Но вообще да, в движке жестко указано 255 таблиц максимум, дальше InitHashtable просто не сработают.
0
30
7 лет назад
Отредактирован Clamp
0
DracoL1ch, то есть игра до исполнения кода считает максимальное количество одновременно существующих таблиц? Каким образом?
Или я неверно понял сообщение?
0
16
7 лет назад
Отредактирован DracoL1ch
0
по крайней мере из globals инициализация InitHashtable идет до начала загрузки. Ну а лимит реализован просто - однажды у тебя будет 255 вызовов InitHashtable и после этого новые создаваться не будут.
0
21
7 лет назад
0
У тебя по Таблице на объект чтоли? Поделись дурью.
0
4
7 лет назад
Отредактирован BrandY TM
0
quq_CCCP:
Зачем вам 10 хештаблиц? Все прекрасно влазит в 1.
Ну а если 2 скила будут юзать одну таблицу? Неудобно ведь :(. FlushChildHashtable не заюзать
3
16
7 лет назад
Отредактирован DracoL1ch
3
Нет никакой проблемы в том, чтобы работать сразу с 255 таблицами, почему бы и нет. Сам принцип хранения ключей подразумевает возможность того, что данные смешаются, а также чем жирнее таблица, тем больше время доступа (не проверял, чисто на слово верю кому-то из далекого прошлого). У меня 21 хт используется, не жалуюсь.
Данные смешаются == хеш ключа совпадет.
Leo: Jass hashtables don't hash anything at all hahaha. Well, they are hashtables, but a hashtable is supposed to have a hash function, which will return a unique value for each key you pass it, to avoid collisions. For example, object data is stored in hashtables as well, and the hash function is that IntegerHash function from my code.
Me - heh you mean their naming is misleading, I see
Leo - I wouldn't say misleading, usually a hashtable is an array of linked lists, which is exactly what the jass hashtable does. But the difference is that it doesn't use any hashing function, it just takes the value directly, extracts the last 3 or 4 bits, and uses that as an array index. Make a search on how hashtables work and you will understand. It's pretty much a standard c++ hashtable, an array of linked lists. It takes the key value, extracts the last bits, and uses that as the array index, and then starts iterating the linked list at that key.
Me - ok got it, I thought at first there are collisions between a keys with similar bytes
Leo - there are, but a hashtable usually has a hashing function associated to return unique values for every different key, thus avoiding collisions. But JASS hashtables don't have any hash function
Me - so we have collisions much more often than supposed to?
Leo - yes
Чтобы оставить комментарий, пожалуйста, войдите на сайт.