Говоря проще, твой юзкейс - это полноценный бред, который не встречается нигде.
Так статья на то и нужна, что предупреждает людей так не делать. Ты ведь не думаешь, что зашедшие читать эту статью знают правильные юзкейсы?
Может там конечно не совсем ясно донесена мысль, но суть такая: не создавайте таблицы в больших количествах. Все остальное вы уже начинаете додумывать.
Unryze, ты видимо как-то криво отвечаешь. Вот с твоей же цитаты.
Ты сам придумал про единожды, а я изначально сразу указал кейс.
Весь поинт сообщения как раз в том, что лучше создавать только ограниченное количество таблиц на карту. Потому что могут найтись уникумы, которые на каждый каст будут новую таблицу заводить. Так что я не знаю что там придумать пытаетесь.
Почему единожды? Я говорю, если локальные таблицы постоянно создавать. В цикле например или на каких-то событиях.
Непонятно какая речь про жалкость 40 байт, если люди умудряются память даже точками засрать, которые казалось бы имеют размер еще меньше.
Суть в том, что если есть объект, который можно создать, но нельзя удалить, это утечка. В варе такого дофига.
Спустя 10 лет еще кому-то не пофиг? Вообще я в комментах отвечал, что имелось в виду.
У нас нет действия типа DestroyHashtable, то есть таблицы нельзя удалять. Поэтому если в каком-то действии постоянно создаются таблицы, память будет течь.
То бишь 0x34 байта выделены всегда, каждая ХТ по стандарту - это 0x28 байт опять, и каждая новая ячейка - 4 байта (исключение boolean (1 байт) и string (каждый символ = 1 байт)).
Здесь главный вопрос деаллокается ли память обратно при удалении элементов. Если да, то утечку памяти хотя бы можно минимизировать очисткой. Если нет, то это вообще жопа и мое утверждение верно на 100%.
А нам ты вангануть предлагаешь? Процессоры с плашкой i3-i5-i7 выходят уже более 10 лет.
11 винда поддерживает интелы с 8 поколения (модели с маркировкой 8000, вышли в конце 2017 года). Маркировку своего процессора можешь найти самостоятельно.
Игре почти 20 лет, из которых уже больше половины срока ее закапывают и объявляют мертвой. Но разумеется всегда и на все находятся некроманты.
И на самом деле лично я например вообще не понимаю зачем в нее продолжают приходить новые люди. В "лихие" нулевые у нас особо не было выбора, не было толком интернета. У большинства просто не было возможности накачать и наставить любых игр как сейчас, да и в целом их на порядки меньше было. Поэтому, для расширения доступного контента, приходилось выдумывать развлечения самостоятельно в виде пользовательских сценариев и модов к имеющимся играм. И возможность обмениваться ими с другими было уже по-своему чудом (помню времена, когда даже просто скачать или залить карту весом в пару мегабайт было достижением, а еще у нас даже была оффлайн база статей для чтения без интернета).
Сейчас же можно качать и ставить новую игру хоть каждый день, неограниченно читать и смотреть любые ресурсы, и вообще делать что угодно. А для любителей творчества придумали кучу более продвинутых игровых движков и редакторов.
Собственно поэтому основная масса более-менее рукастых разработчиков и ушла на другие технологии, так как что угодно будет лучше и переспективнее, чем престарелый вар3. К чему мы всех остальных и призываем тоже.
Если быть достаточно неаккуратным - будет. Например вот такой вот код, при использовании глобалок сработает совсем не так, как ожидалось:
Можешь сделать эти переменные локальными - ничего не поменяется. Этот код всегда будет работать так, как ты его написал. Никаких зависимостей от внешних условий тут нет.
Нет никакого износа, и нет никакой разницы сколько раз в секунду используется переменная.
Наложения в использовании тоже не будет. В варкрафте все действия происходят строго последовательно, и пока текущая цепочка выполнения не закончится, следующая не начнется.
Ну я так понимаю тут суть в том, что при пике через булэкспр в группу вообще не заносятся юниты. То есть связный список вообще не задействуется, и заниматься очисткой тоже потом не надо.
Хотя в реалиях варкрафта конечно все надо проверять на практике, так как разрабы были очень кривые.
Да, в самом коде тоже можно оптимизировать. Про вынос стрингхешей уже сказали.
Еще например функция GetWorldBounds(), насколько помнится, создает новый рект каждый вызов. То есть его как минимум надо удалять после этого. А лучше только один раз ее вызвать и тоже просто загнать в глобалку на всю игру. Или можно пользоваться БЖшной глобалкой bj_mapInitialPlayableArea (но она учитывает только играбельную зону карты, без черных краев).
Естественно. За все время уже было огромное множество улучшенных и полностью переделанных вариаций игры, но это никому не нужно на деле.
Как гласит древняя цитата: "Есть два типа бесполезных проектов: варкрафт на движке другой игры, и другая игра на движке варкрафта."
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
Отредактирован Hanabishi
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
Может там конечно не совсем ясно донесена мысль, но суть такая: не создавайте таблицы в больших количествах. Все остальное вы уже начинаете додумывать.
Отредактирован Hanabishi
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
Весь поинт сообщения как раз в том, что лучше создавать только ограниченное количество таблиц на карту. Потому что могут найтись уникумы, которые на каждый каст будут новую таблицу заводить. Так что я не знаю что там придумать пытаетесь.
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
Непонятно какая речь про жалкость 40 байт, если люди умудряются память даже точками засрать, которые казалось бы имеют размер еще меньше.
Суть в том, что если есть объект, который можно создать, но нельзя удалить, это утечка. В варе такого дофига.
» WarCraft 3 / Hashtable - работаем с хеш-таблицей
У нас нет действия типа DestroyHashtable, то есть таблицы нельзя удалять. Поэтому если в каком-то действии постоянно создаются таблицы, память будет течь.
» Администрация XGM / Не размещается на главной
» Unity / unity nullreferenceexception
Отредактирован Hanabishi
» Администрация XGM / Баг репостных ресурсов
» Прочее / Windows 11 – Discussion
11 винда поддерживает интелы с 8 поколения (модели с маркировкой 8000, вышли в конце 2017 года). Маркировку своего процессора можешь найти самостоятельно.
» Администрация XGM / Отображать все ресурсы и комментарии пользователя
» Администрация XGM / Не вижу рейтинг
» WarCraft 3 / Проекты варкрафта
И на самом деле лично я например вообще не понимаю зачем в нее продолжают приходить новые люди. В "лихие" нулевые у нас особо не было выбора, не было толком интернета. У большинства просто не было возможности накачать и наставить любых игр как сейчас, да и в целом их на порядки меньше было. Поэтому, для расширения доступного контента, приходилось выдумывать развлечения самостоятельно в виде пользовательских сценариев и модов к имеющимся играм. И возможность обмениваться ими с другими было уже по-своему чудом (помню времена, когда даже просто скачать или залить карту весом в пару мегабайт было достижением, а еще у нас даже была оффлайн база статей для чтения без интернета).
Сейчас же можно качать и ставить новую игру хоть каждый день, неограниченно читать и смотреть любые ресурсы, и вообще делать что угодно. А для любителей творчества придумали кучу более продвинутых игровых движков и редакторов.
Собственно поэтому основная масса более-менее рукастых разработчиков и ушла на другие технологии, так как что угодно будет лучше и переспективнее, чем престарелый вар3. К чему мы всех остальных и призываем тоже.
» WarCraft 3 / Что быстрее ForGroup() или Loop?
» WarCraft 3 / Что быстрее ForGroup() или Loop?
Наложения в использовании тоже не будет. В варкрафте все действия происходят строго последовательно, и пока текущая цепочка выполнения не закончится, следующая не начнется.
Хотя в реалиях варкрафта конечно все надо проверять на практике, так как разрабы были очень кривые.
» WarCraft 3 / Создание ИИ
» WarCraft 3 / Работа с массивами в cJass
» WarCraft 3 / кое что о джассе
Отредактирован Hanabishi
» WarCraft 3 / Утечки в коде
Еще например функция GetWorldBounds(), насколько помнится, создает новый рект каждый вызов. То есть его как минимум надо удалять после этого. А лучше только один раз ее вызвать и тоже просто загнать в глобалку на всю игру. Или можно пользоваться БЖшной глобалкой bj_mapInitialPlayableArea (но она учитывает только играбельную зону карты, без черных краев).
» WarCraft 3 / Утечки в коде
» Мир безумного / Warcraft 3 Reforged на Unreal Engine 5
Как гласит древняя цитата: "Есть два типа бесполезных проектов: варкрафт на движке другой игры, и другая игра на движке варкрафта."
» WarCraft 3 / Русский JNGP Rebuil 1.4
» WarCraft 3 / Зачем 50% декораций в редакторе?
» WarCraft 3 / Зачем 50% декораций в редакторе?
» Программирование / Как быстро вписывать конец тега.
» Администрация XGM / Планируют ли разработчики XGM, сделать поиск по разделу Вопросы?
Xtreme Gamedev & Modmaking