Вот все мы знаем, что после каждой установленной точки надо ее очищать, а что делать с переменными типа real или integer?
Стоит ли очищать эти данные, путем установления на нулевое значение в завершения триггера?
Влияет ли это на память?

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

Нет, они не утекают.
Утекают группы, точки, эффекты, строки, вроде как камеры и многие объекты типа handle, но не все, есть некоторые псевдохэндлы. Но в этом не эксперт, просто ретранслировал информацию, которую прежде читал.
строки не чистятся

Вот тут о том, что текстаг не является настоящим хэндлом, но не знаю, создаёт ли он ещё утечки кроме утечки строки.
DracoL1ch:
тексттаг не является настоящим хендлом и не подвержен синхронизации, каждйы клиент имеет свои таги
аналогично молнии и уберсплаты
проверяется GetHandleId(объект)
если результат меньше 0x100000 - это локальный объект без синхронизации
Странно, что нигде не видел статьи с полным списком возможных утечек. По идее за столько лет кто-то мог бы и заморочиться.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
10
5 лет назад
1
нет, они сами очищаются
3
26
5 лет назад
3
Нет, они не утекают.
Утекают группы, точки, эффекты, строки, вроде как камеры и многие объекты типа handle, но не все, есть некоторые псевдохэндлы. Но в этом не эксперт, просто ретранслировал информацию, которую прежде читал.
строки не чистятся

Вот тут о том, что текстаг не является настоящим хэндлом, но не знаю, создаёт ли он ещё утечки кроме утечки строки.
DracoL1ch:
тексттаг не является настоящим хендлом и не подвержен синхронизации, каждйы клиент имеет свои таги
аналогично молнии и уберсплаты
проверяется GetHandleId(объект)
если результат меньше 0x100000 - это локальный объект без синхронизации
Странно, что нигде не видел статьи с полным списком возможных утечек. По идее за столько лет кто-то мог бы и заморочиться.
Принятый ответ
0
16
5 лет назад
0
строки не могут утекать по определению таблицы строк
0
26
5 лет назад
0
они кэшируются
статья по ссылке неплохая, но ей не хватает информации по объёму каждого типа утечки памяти и информации по юнитам, будут ли переменные типа unit расходовать больше памяти, чем юниты сами по себе, одинаковы ли в этом плане bj_-глобалки и пользовательские глобалки?
0
28
5 лет назад
0
переменные типа unit
Переменная типа юнит - это просто ссылка на сам объект. Такая переменная занимает не больше, чем integer.
одинаковы ли в этом плане bj_-глобалки и пользовательские глобалки
Да какая разница, при запуске подгружаются common.j, blizzard.j и war3map.j. Язык-то один.
0
26
5 лет назад
0
A unit will always keep a tiny bit of memory, even when removed properly. 0.04 kb and unpreventable.
Вдруг глобальная пользовательская ссылка на юнита, когда её переназначают на другого юнита, тоже оставляет утечку в памяти, тип object же?
Хотя нет, точки и группы создают же объект, а эта просто ссылается.
0
27
5 лет назад
0
DracoL1ch, молнии тоже локально можно создавать? не знал.
1
28
5 лет назад
Отредактирован PT153
1
Хотя нет, точки и группы создают же объект, а эта просто ссылается.
Нужно понимать разницу между переменной и самим объектом. Переменная просто содержит ссылку на объект, и занимает 32 бита (для варкарафта), объект же занимает столько, сколько ему нужно. Объект нужно либо самому удалять, либо игра сама это сделает (юнит умер и разложился). Глобалки тоже нужно обнулять, чтобы garbage collector (или аналог этого для вара) видел, что хендл объекта никому не нужен, и выдавал этот хендл новому объекту.
0
26
5 лет назад
0
Извини, если задену, но ты просто мастер объяснять. Ничего нового не сообщил, зато в известной информации запутал!
0
28
5 лет назад
0
в известной информации запутал!
И в чём же?
0
26
5 лет назад
0
Что глобалки нужно обнулять. Например, удалил группу, нужно ли после этого обнулить глобалку на неё? Как бы понимаю, что нет, но объяснение довело до таких мыслей.
2
16
5 лет назад
2
предполагается, что ты в глобалку один фиг будешь что-то записывать и неиспользуемый хендл и так, и так будет "обнулен".
0
26
5 лет назад
0
DracoL1ch, ну да)
PT153, смотри-ка
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction
группа-то является bj_-переменной, которая не множится, то есть не надо её удалять после создания юнита.
0
28
5 лет назад
0
PT153, смотри-ка
Да, в этом случае обнулять и удалять не надо, потому что новая группа нигде не создаётся.
Что глобалки нужно обнулять.
Лично я обнуляю ячейки с структурах, потому что неизвестно, когда данная ячейка будет вновь использована. То есть, записанный хендл там может висеть долго. Чтобы он был освобождён, я обнуляю. А ячейки в структурах - глобальные массивы.
Также нужно обнулять локальные массивы типа handle и его наследников.
А так согласен с DracoL1ch.
предполагается, что ты в глобалку один фиг будешь что-то записывать и неиспользуемый хендл и так, и так будет "обнулен".
Чтобы оставить комментарий, пожалуйста, войдите на сайт.