Добрый вечер. Тут говорится, что при обращении к массиву выделяется память на 1024 элемента.
Вопрос. Выделение памяти в хеш-таблицах работает так же? То есть при обращении к первым выделится 1024, а при вызове FlushChildHashtable() - освободится? 1.26а

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

да, массив постоянно будет делать reAllocMem , если текущий размер окажется мельче, чем номер ячейки. Поэтому, если массив будет часто писаться с инкрементом, то выгоднее сперва прописать в последнее допустимое значение (8191 для 26 патча) типа MyArray[8191]=0
чисто чтобы его по памяти не возили туда-сюда каждые X значений (не смотрел, сколько изначально выделяется)
я вот у себя пофиксил такую же байду с таблицей строк. игра выделяет по 16 ячеек под строки, а у меня в доте они генерируются десятками в секунду. Каждую секунду игра делала ре-аллок памяти, а к середине игры там уже несколько мб таблица туда-сюда ездила. Сделал аллок в разы больше - и таблица всего 2 раза переедет за 40 минут игры максимум. Экономия тактов налицо.
Хеш-таблицы вообще не являются массивами, гугл в помощь, поэтому там об этом думать не стоит. Стоит думать лучше о том, чтобы первичных (родительских) ключей было меньше, чем вторичных, чисто исходя из того, что в этом случае перебор по таблице окажется быстрее
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
4 года назад
0
PT153, а это я уже не помню, но отследить удавалось :D
0
17
4 года назад
0
PT153:
Почему информация о массивах является верной?
Не знаю является ли она верной, но её написал Hanabishi, а не ноунейм, она выбрана лучшим ответом на этом сайте, никто из пользователей в комментариях (DracoL1ch, Doc, Clamp, nvc123, quq_CCCP) никак не опровергнул это
0
26
4 года назад
0
вполне возможно так и есть, но какая практическая польза от этих знаний?
2
16
4 года назад
Отредактирован DracoL1ch
2
да, массив постоянно будет делать reAllocMem , если текущий размер окажется мельче, чем номер ячейки. Поэтому, если массив будет часто писаться с инкрементом, то выгоднее сперва прописать в последнее допустимое значение (8191 для 26 патча) типа MyArray[8191]=0
чисто чтобы его по памяти не возили туда-сюда каждые X значений (не смотрел, сколько изначально выделяется)
я вот у себя пофиксил такую же байду с таблицей строк. игра выделяет по 16 ячеек под строки, а у меня в доте они генерируются десятками в секунду. Каждую секунду игра делала ре-аллок памяти, а к середине игры там уже несколько мб таблица туда-сюда ездила. Сделал аллок в разы больше - и таблица всего 2 раза переедет за 40 минут игры максимум. Экономия тактов налицо.
Хеш-таблицы вообще не являются массивами, гугл в помощь, поэтому там об этом думать не стоит. Стоит думать лучше о том, чтобы первичных (родительских) ключей было меньше, чем вторичных, чисто исходя из того, что в этом случае перебор по таблице окажется быстрее
Принятый ответ
0
19
4 года назад
0
DracoL1ch, есть костыльный метод, добавить новую JASS функцию, работающую непосредственно с массивом, который вам нужен.
0
16
4 года назад
0
для чего? зачем?
0
19
4 года назад
0
DracoL1ch, ну мне так раньше было удобнее, я вообще только память использовал, когда оригинальный game.dll редактировал.
0
17
4 года назад
0
Не понял. Если в jass hashtable это хеш-таблица хеш-таблиц, то зачем экономить parentkey?
0
28
4 года назад
Отредактирован PT153
0
Хеш-таблицы вообще не являются массивами
Но ведь хештаблица в стандартной реализации - это массив, к каждой ячейке которого прикреплён список (который тоже может быть ArrayList). При увеличении объектов в таблице основной массив может быть заменён более большим массивом.
Как сделано в С\С++ не знаю точно.
0
37
4 года назад
Отредактирован ScorpioT1000
0
Есть вероятность, что это один хешмап с конкатенацией двух ключей при работе из jass
0
16
4 года назад
0
Точно помню, что хештаблица варкрафта не эквивалентна настоящей, там даже по ключам ограничения есть, но деталей не помню, для кодера жасс это неважно.
Мы не экономим парентов, мы стараемся, чтобы корзин для поиска было меньше, чем яиц в них. На вскидку это связный список, а не массив, но я не эксперт в реализациях, да и исходников не имею
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.