globals
location Loc
endglobals
function DoSomething takes nothing returns nothing
local location loc
set Loc = Location(0., 0.)
set loc = Loc
endfunction
В данном примере важно понять, утекает ли локальная переменная loc без обнуления или нет. Тут не нужно удалять локацию, она занесена в глобалку и будет использоваться в другом коде.
Смотри видео внимательно, оно потом падает, ибо проходят и другие действия. Оно не растёт без конца. Оно ещё и падает
Предоставленный код тобою - утекает лишь в случае если его повторять и не удалять используемый объект.
Я предоставил ссылку на мою статью, где показывается, что если удалять точку и не обнулять переменную, потребление ОЗУ растёт. В твоей статье это якобы опровергается, но в тестах с локацией, что ты привёл, локалка обнуляется (ну и разумеется потребление ОЗУ остаётся неизменным). Это не опровержение, а подтверждение.
вопрос к тебе, как думаешь, утекает ли это
Судя по твоему тесту с юнитов - утечек не будет.
Я так понял, проблема с локалками возникает в том случае, если в функции создаётся хендл.
То есть, если создаётся хендл, то ЛЮБУЮ локалку этой функции, в которой этот хендл находится или находился в процессе выполнения функции, нужно обнулить.
И прекратите цитировать комментарий целиком по нескольку раз в ответе.
05070000 -> local handle
00000487 -> её id
0C290500 -> literal register (type) location
13290000 -> push register
0C2A0500 -> literal register (type) location
132A0000 -> push register
15000000 -> callnative
00000314 -> id нативки
11000000 -> setvar
00000F7D -> id переменной
0E2B0700 -> get var register (type) Handle
00000F7D -> id переменной
112B0000 -> setvar register
00000487 -> id переменной
0E2C0700 -> get var register (type) Handle
00000F7D -> id перемнной
132C0000 -> push register
15000000 -> callnative
00000315 -> id нативки
0C000000 -> literal R0
27000000 -> return
А почему тут два раза callnative? Нативка же одна в примере, Location.
Скорее всего часть взята из дополненного примера, где есть RemoveLocation.
Не могу понять, почему в моём примере байткод начинается с
05070000 -> local handle
00000487 -> её id
В то время как в твоём примере ниже
05070000 -> local (type) handle
00000487 -> id переменной
Хотя обе функции начинаются с local location.
Думаю, тут какая-то ошибка.
Нужно исправить все ошибки и более подробно объяснить, в каких ситуациях возникает утечка, а в каких нет. И главное, почему утечка переменной вообще возникает:
3 фактических push, так как локальный реестр не был обнулён, то popstack (который вызывается всегда) решает его не трогать
мы СОЗДАЁМ переменную и присваиваем её в локальную переменную
Создаём объект
Простой ответ - сами переменные не утекают ни при каких обстоятельствах и они преобразуются в нечто статичное, и им выделена память единожды. Потому, утечки вызываются фактически банальной проблемой логики в самом коде, то бишь вы создали хендл, а затем его не удалили и так может повторяться уйму раз.
Ладно, тогда почему тут всё удаляется, а потребление ОЗУ растёт? В твоих примерах с группой и локацией переменная обнуляется.
Обнова была выпущена из-за того, что я улучшил файл clear-game-path.reg после внимательного изучения findpath.lua. До этого .reg файл очищал не все пути, и таким образом иногда JNGP всё же мог найти путь к вару. Сейчас это проблема исправлена. А переименование - приведение всех файлов в корневой папке к одному виду, без пробелов - просто дополнение.
» WarCraft 3 / Jass MythBusters
Ред. PT153
» WarCraft 3 / Jass MythBusters
То есть, если создаётся хендл, то ЛЮБУЮ локалку этой функции, в которой этот хендл находится или находился в процессе выполнения функции, нужно обнулить.
Скорее всего часть взята из дополненного примера, где есть RemoveLocation.
Думаю, тут какая-то ошибка.
Ред. PT153
» WarCraft 3 / Jass MythBusters
Ред. PT153
» WarCraft 3 / JNGP: Rebuild от PT153
» WarCraft 3 / JNGP: Rebuild от PT153
» WarCraft 3 / JNGP: Rebuild от PT153
Прокрутить к ресурсу
Обновление v1.3.1
» World of WarCraft / Dragonflight - Новое дополнение в World of Warcraft!
» World of WarCraft / Dragonflight - Новое дополнение в World of Warcraft!
» WarCraft 3 / HiveWE - World Editor 0.6
» WarCraft 3 / HiveWE - World Editor 0.6
» WarCraft 3 / JNGP: Rebuild от PT153
» WarCraft 3 / Warcraft 2: Tides of Darkness
» WarCraft 3 / Сравнительная таблица Reforged и 1.26
Ред. PT153
» WarCraft 3 / Сравнительная таблица Reforged и 1.26
Ред. PT153
» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4
» Гейминг / Blizzard ушла из России
» Гейминг / Blizzard ушла из России
Ред. PT153
» WarCraft 3 / Reforged после обновления или само перестало запускаться?
» WarCraft 3 / Улучшение запускается с самого начала игры
» WarCraft 3 / Почему жывтоне перестали мяукать?
Ред. PT153
» WarCraft 3 / GetCameraField + GetLocalPlayer = ошибка
» WarCraft 3 / Как использовать Jasshelper без редактора?
Ред. PT153
» WarCraft 3 / как правильно расшифровать функцию?
» WarCraft 3 / Боевой порядок юнитов (формация)