В общем, мне бы хотелось узнать все плюсы и все минус хеш-таблицы в сравнении с обузом массивных переменных.
Пока из минусов могу сказать то, что получается больше строк кода практически в 1.5 раз, а в системах с 0.01 таймерами это лишняя нагрузочка и минус фпс.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
16
7 лет назад
0
Diaboliko:
массив удобнее ТОЛЬКО потому, что слегка быстрее
При использовании БД на массивах прозрачны действия движка(как реализован интерфейс работы с хт - одним близзам известно). Сразу ясно какой из вариантов реализации эффективнее
?? обычное дерево. что конкретно тебя смущает-то? неважно, что под капотом, если оно работает без ошибок
0
32
7 лет назад
0
DracoL1ch, Просто бытует мнение что у хт не пофикшена коллизия, но так доказательств этому нету....
0
30
7 лет назад
0
Да там StringHash( ) жрёт больше, чем все перезаписывания в массивах вместе взятые (кстати, на память не влияет значение переменной, влияет только факт её проинициализированности). Короче, юзайте структуры (и читайте русский мануал по ним), это удобнее хранения данных в хэше или массиве, и по факту является работой с массивами напрямую. И быстро, и удобно.
0
26
7 лет назад
Отредактирован Extremator
0
Clamp, что есть "проинициализированность переменной" ? х)
Clamp, чем отличаются структуры (которые есть только на момент их написания, но их попросту не существует в скрипте) от массивов (которые просто есть и точка)?
0
32
7 лет назад
0
Extremator:
Clamp, что есть "проинициализированность переменной" ? х)
Clamp, чем отличаются структуры (которые есть только на момент их написания, но их попросту не существует в скрипте) от массивов (которые просто есть и точка)?
Интерфейсом и системой слежения за тем занята или свободна та или иная ячейка + защита от переполнения массива, не хотите vjass пишите все сами...
0
26
7 лет назад
0
Не хотите всё сами - пишите на vJass / GUI.
действительно
0
30
7 лет назад
0
чем отличаются структуры от массивов?
Внимание, ответ:
структуры
есть только на момент их написания
массивы
просто есть и точка
что есть "проинициализированность переменной" ?
Что в памяти выделено место, где она хранится, и ничто иное это место занять не может. По-хорошему, в компиляторе должен быть сборщик мусора, который освобождает память, на которую не остаётся ни одной живой ссылки, но в варкрафте слишком много типов, которые являются ссылочными и, следовательно, всегда держат ссылку на память, не давая сборщику мусора её освобождать. Вот пока переменная висит неочищенным ссылочным типом, она является проинициализированной.

чем отличаются структуры от массивов?
Тем, что препроцессор vJass сам генерирует Jass код таким образом, что лишних масссивов попросту не создаётся (за инициализированность элементов массивов ссылочных типов, однако, всё равно отвечает автор vJass кода). Кстати, если мне не изменяет память, каждый созданный массив де-факто имеет 8190 элементов, если проинициализирован хотя бы один из них: в них не лежат ссылки, но место зарезервировано.
0
26
7 лет назад
0
Clamp:
Внимание, ответ
ты пишешь что это удобнее... вопрос - чем? подталкивая к ответу на вопрос тс
а в скобках я лишь обозначил их природу
ты же мне отвечаешь - "их природа бла-бла-бла...", что не является ответом
а вопрос тс в том что плюс, а что минус при абузе
Дальше
Ты говоришь что не имеет значения что записано в переменной
И теперь следом говоришь что она держит ссылку, который == корень зла
Добавляя что наличие чего-либо в переменной (ссылки) является ответом на то, "проинициализированна" ли она, или нет...
. . . что в переменной (ссылка) - не важно
. . . важно - проинициализированная ли она
. . . проинициалзация переменной == ссылке в переменной
WTF?
Clamp:
каждый созданный массив де-факто имеет 8190 элементов
а почему не 8191? или не 8192?
0
32
7 лет назад
0
Clamp, Extremator, что то вы совсем уехали от темы, надо не разбирать что как устроено а что лучше в тех или иных случаях и почему...
0
30
7 лет назад
Отредактирован Clamp
0
защита от переполнения массива
Всё легко переполняется, если поставить целью переполнять.
вот так, например.
struct New
{
	int a
	
	static New create(int _Input) {
		New this = New.allocate()
		this.a = _Input
		return this
	}
}

void SomeFunc ()
{
	int i = 0
	while ( i++ < 9001 ) {
		New.create(0)
	}
	TriggerSleepAction(99999) // How long we need to keep overflow.
}

WTF?
Господи, ты вообще про разницу между нативными и ссылочными типами не слышал? Не читал ни одной статьи по оптимизации? Нативные типы плоди и инициализируй как и сколько хочешь, их подчищает ядро системы, а ссылочные типы для системы - чёрный ящик, она их не трогает, и их надо чистить самому.
И поскольку мы говорим в отношении варкрафта, а не системы, а в варкрафте помимо нескольких нативных есть ещё и куча ссылочных типов, то для тебя по факту имеет значение статус инициализированности переменных только этих ссылочных типов.
а почему не 8191? или не 8192?
Потому что я так запомнил.
0
26
7 лет назад
0
quq_CCCP, так в том-то и дело, что вопрошающий человек и не понимающий о том что Clamp пишет будет думать так - "блин, я этого не понимаю, это слишком заумно для меня, для меня это в данный момент пустой звук, это мне не поможет", и в итоге он уходит от сюда ни с чем.
А ведь тематика здесь как раз такая, что незнающий человек может спросить и получить вопрошаемое знание. Разве нет?
А понимающий человек - попросту не будет задавать такой вопрос, и следовательно не получит такой ни-о-чём-размытый ответ... Но если у этого же человека будет другой вопрос - ему вот такие дадут другой точно такой же ответ, при этом нагородив тонны важного текста... ага, да
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.