Слышал, что не стоит создавать много хештаблиц, так как это занимает много памяти.
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.
Принятый ответ
Каждый новый хеш-тейбл инициализируется заново и остаётся висеть в оперативке до удаления из скрипта карты или до завершения игры (по крайней мере, мне так помнится). Операции выделения памяти довольно тяжёлые сами по себе, но куда значимее тот факт, что пересоздание и плождение таблиц - абсолютно бессмысленные операции по своей сути, они не несут вообще никакого положительного выхлопа.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Clamp
Но вообще да, в движке жестко указано 255 таблиц максимум, дальше InitHashtable просто не сработают.
Отредактирован Clamp
Или я неверно понял сообщение?
Отредактирован DracoL1ch
Отредактирован BrandY TM
Отредактирован DracoL1ch
Данные смешаются == хеш ключа совпадет.
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