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

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

Ответ
 
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
Строки, аргументы и утечки...
Собственно, вопросы в комментариях...
Код:
globals 
    integer j = 0
endglobals

function MyFunc takes unit u returns nothing
    local string s = "abc"
    local integer i = 10
    loop
    exitwhen j == i 
        call ABC (s, u, i)
        j++
    endloop 
    set j = 0
    set s = null // есть ли смысл загонять строки в переменные с тем чтобы потом обнулить?    
    set u = null // надо ли обнулять аргументы функций, а не только локалки?  
    set i = null // надо ли обнулять нативные типы вроде инт/риал/бул...?
endfunction
// есть ли смысл делать j глобалкой, чтоб при частом вызове MyFunc
// не тратить время на создание локалки?
Старый 31.03.2009, 22:55
Hellfim
Новичок
online
Опыт: 79,707
Активность:
Xenosapien, на все ответы нет, кроме последнего, в последнем сомневаюсь. Насколько часто?
Старый 31.03.2009, 22:57
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
// есть ли смысл делать j глобалкой, чтоб при частом вызове MyFunc
// не тратить время на создание локалки?

тут почти одинаково
Цитата:
// есть ли смысл загонять строки в переменные с тем чтобы потом обнулить?

стринги не удаляются
Цитата:
j++

лол?

ScorpioT1000 добавил:
чтото я оператора ++ не видел в жассе
Старый 31.03.2009, 23:00
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Xenosapien
1)Ты проснулся?)
2)
Цитата:
// есть ли смысл загонять строки в переменные с тем чтобы потом обнулить?

Не имеет смысла, как уже Скорп сказал
Цитата:
// надо ли обнулять аргументы функций, а не только локалки?

Я лично не обнулял, да и некоторые жассеры говорят, что не надо
Цитата:
set i = null // надо ли обнулять нативные типы вроде инт/риал/бул...?

не надо
Цитата:
// есть ли смысл делать j глобалкой, чтоб при частом вызове MyFunc
// не тратить время на создание локалки?

имхо не имеет, особенно, если в одно время будет исполнятся несколько этих тригов
Старый 31.03.2009, 23:03
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Короче так... если не хочешь, чтобы стринги одинаковые не висели в памяти, то делай все string глобалками, но ни в коем случае не локалками...

в JGNP есть вообще такая функция как взять триггер в scope,endscope

и можно объявлять:
Код:
scope
globals
 private constant string blabla = "try to kill me"
 private constant string zomgnap = "Godlike megakill"
private constant integer numberofsotona = 666
endglobals

//потом идёт твой обычный триггер

endscope


Это чтобы эти глобалки были только для данного триггера... и тогда ты сможешь делать в других триггерах точно такие же названия глобалкам)

Стринги обнулять не надо, я сам прошёлся по своей карте данным методом... в итоге уменьшил количество лишних хендлов... которые со временем засоряют память игры.
Старый 31.03.2009, 23:06
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Код:
library game_const
globals
constant string blabla = "try to kill me"
constant string zomgnap = "Godlike megakill"
constant integer numberofsotona = 666
endglobals

endlibrary

Конкретно такие вещи лучше так держать, ибо могут понадобится везде
Старый 31.03.2009, 23:08
ScorpioT1000
Работаем
offline
Опыт: отключен
какая разница, это константы все "..." будут потом в "статической памяти" уложены и на них ссылки. а сложение/деление строк, с каждым таким оператором создается новая

Отредактировано ScorpioT1000, 01.04.2009 в 16:41.
Старый 31.03.2009, 23:13
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
dankbar всем, судя по всему тут больше нечего сказать...
Старый 31.03.2009, 23:57
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
таки есть, ты решил заняться кодингом на жасс?
Старый 31.03.2009, 23:59
SRes
1110101000
offline
Опыт: 9,997
Активность:
Xenosapien, Тут нету такого как, ++j или j++, хоть и джасс поидее построен на интерпретации С++ (в коем сомниваюсь, но это мое мнение, т.е. имхо)...
Цитата:
Сообщение от Ranger21
Код:
scope
globals
 private constant string blabla = "try to kill me"
 private constant string zomgnap = "Godlike megakill"
private constant integer numberofsotona = 666
endglobals

//потом идёт твой обычный триггер

endscope


Смысл ? По сути ты добавляешь туже самую глобалку, только статическую, без возможности изменения, причем, не одноразово, если в каждом триггере свою.

Ranger, чего ты так приелся ко всем подряд ? Ну, просто, всем постоянно советуешь юзать вДжасс... Как буд-то это что-то мега крутое, с помощью чего можно изменить ВЕ.
*palevo* removed. © swdn

Отредактировано ShadoW DaemoN, 01.04.2009 в 16:35.
Старый 01.04.2009, 00:08
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Xenosapien
1. Так делают только те, кто первый раз услышали про "обнуление". Собственно, строки кешируются => вообще без разницы, будешь ли ты писать:
Код:
local string s = "ololo"
// . . .
call StoreInteger(gc, s, "caster", H2I(caster))
call StoreInteger(gc, s, "target", H2I(target))
// . . .

// или вот так:

call StoreInteger(gc, "ololo", "caster", H2I(caster))
call StoreInteger(gc, "ololo", "target", H2I(target))


2. Я даже не знаю, как прокомментировать-то... Нет, конечно.
3. Локальные переменные нативных типов, а именно integer, real, boolean, string, code не подлежат обнулению.
4. Я так не думаю, лучше локалка.

Артте, хмм, лол... Бегом учить структуру *.j файлов. Все глобалки в любом случае будут перенесены в начало кода до объявления функций, вне зависимости от того, стоят ли они в скопах, библиотеках или просто так.
Старый 01.04.2009, 16:34
Ответ

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

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

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

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



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