XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
NCrashed

offline
Опыт: 13,553
Активность:
Локальные переменные в функции
Если объявить локалку таким образом, то ее уже никак не убрать из памяти...
Код:
local unit u

А локальные переменные - аргументы функции уничтожаются? Так вопрос будет ли создавать утечку такая функция:
Код:
function MyFunction takes unit u1, unit u2 returns nothing
set u2 = CreateUnit(GetOwningPlayer(u1),'n002', GetUnitX(u1),GetUnitY(u1) ,0)
call UnitAddAbility(u2,'A01C')
    call IssueTargetOrderBJ( u2, "slow", u1 )
    call TriggerSleepAction(1)
call RemoveUnit(u2)
endfunction
...
call MyFunction(u1,null)
...
Старый 19.11.2008, 12:24
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Если объявить локалку таким образом, то ее уже никак не убрать из памяти...
кто тебе сказал такую тупость?
Старый 19.11.2008, 13:19
NCrashed

offline
Опыт: 13,553
Активность:
Значит статью про джазз я неправильно понял, для чего их тогда надо обнулять после окончания функции? Почему большиство опытных джаззеров не приветствуют использование локалок?
Старый 19.11.2008, 13:27
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
В статейке в одной сказано что если перед окончанием тригера локалку не обнулить то она останется в памяти! т.е. +утечка
Старый 19.11.2008, 13:32
zer0ne

offline
Опыт: 11,219
Активность:
Цитата:
большиство опытных джаззеров не приветствуют использование локалок

не слышал о таком
Старый 19.11.2008, 13:38
NCrashed

offline
Опыт: 13,553
Активность:
Ладно я перефразирую вопрос)
Выделяем память под локальную переменную, в конце функции эта память высвобождается? или только когда эта переменная равна 0?
Цитата:
Читатель, если удалить все основные утечки, то для 99,99% сценариев больше ничего не нужно оптимизировать. Но, как оказалось, существуют и другие виды утечек. Например, куда девается локальная переменная после того, как триггер кончил исполнение? На самом деле они продолжают сидеть в памяти. И хотя занимают они очень мало, но на протяжении длинной игры, их может накопиться порядочно. Чтобы этого избежать, имеет смысл обнулять локальные переменные после окончания действия триггера (по крайней мере, переменные объектного типа).


NCrashed добавил:
Jon именно такую глупость мне сказал Sergey
Старый 19.11.2008, 13:45
J
expert
offline
Опыт: 48,447
Активность:
это афтар статьи несколько неудачно сформулировал мыслю...
Старый 19.11.2008, 13:45
NCrashed

offline
Опыт: 13,553
Активность:
А ка де тогда эту мыслю понимать?)
Старый 19.11.2008, 13:47
J
expert
offline
Опыт: 48,447
Активность:
локальные переменые сдесь вообще нипричем, то что в даном контексте названо утечкой, эти лишний слот в стеке игровых ресурсов который не освободили, это проявляется из-за несколько кривого обращения с локалками в интерпретаторе, предположение что локалки накапливаются и засоряют память - абсурдно. То что рекомендуемо обнулять локалки в конце каждой функции это верно, потомучто тогда этот баг не наблюдается, естествено он проявляется не из-за всех локалок, тут больше имеет значение состояние обьекта на момент выхода из функции, но чтобы "наверняка" обнуляют все локалки сразу...
Старый 19.11.2008, 13:48
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Jon так че их в конце не надо обнулять? 0_0

А я всегда эти лишнии действия делал! =(
Старый 19.11.2008, 13:51
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
Почему большиство опытных джаззеров не приветствуют использование локалок?

это не правда

Цитата:
Jon именно такую глупость мне сказал Sergey

в разделе желтой прессы есть мои коментарии и описание ошибок в этой статье, советую глянуть (надо взяцца и переписать ее начисто)
Старый 19.11.2008, 13:52
NCrashed

offline
Опыт: 13,553
Активность:
Ну тогда нужно поправить статью, а то из начальный мысли в конечную прийти очень сложно. Значит обнулил локалку и про нее забыл? Тогда вопрос считается решенным).
Старый 19.11.2008, 13:53
adic3x

offline
Опыт: 108,439
Активность:
http://xgm.guru/forum/showthread.php?t=19079 - вот ссылка

ADOLF добавил:
там это есть) а дополнение дествительно надо доработать и повесит, я займусь этим как появиться время
Старый 19.11.2008, 13:55
NCrashed

offline
Опыт: 13,553
Активность:
Прочитал, понял многие вещи, которые меня убивали в джаззе)), это дополнение обязательно должно включится в статью.
Старый 19.11.2008, 14:06
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:29.