AMX MOD X
Вторник, 27.01.2026, 06:14:49



Приветствую Вас Гость | RSS
[ Главная ] [ static vs new - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
static vs new
se7hДата: Пятница, 27.06.2008, 14:08:13 | Сообщение # 1
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
меня интересует мнение опытных скриптеров: стоит ли использовать static, когда можно обойтись new и существуют ли какие-то подводные камни у static?

 
DaTaДата: Пятница, 27.06.2008, 17:49:16 | Сообщение # 2
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Если ты используешь в функции new, то при каждом вызове функции переменная создается заново(это занимает некоторое время), а при выходе из функции высвобождается память(тоже за некоторое время).

При использовании static объявления переменной, она создается только один раз.

Трюк0
Ну основное предназначение static - хранить значение переменной между вызовами функции, т.е. ты можешь вместо глобальных переменных использовать static внутри функции, если эти переменные нигде не используются больше, ради наглядности.

Трюк 1
Если тебе нужно использовать большое кол-во памяти(блок текста, new szString[1024] например) в функции, которая часто вызывается(PreThink, etc.), то ты можешь оптимизировать выполнение скрипта, используя static.

Трюк 2
Иногда компилятор думает, что функция рекурсивная, т.е. может вызывать сама себя, хотя это и не так и он не знает сколько памяти выделить, и расчитывает на использование стека(динамической памяти). Можно доказать компилятору, что функция не рекурсивная, используя в функции хотя бы 1 static переменную :D

Ограничение
В рекурсивных функциях нельзя использовать static

"Подводный камень"
В расчете на то, что при создании new переменной ей присваивается нулевое значение, можно забыть обнулить static переменную :)

Вот и все, что я про нее знаю...

 
se7hДата: Пятница, 27.06.2008, 18:50:18 | Сообщение # 3
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
спасибо за ответ ;)

 
slogicДата: Четверг, 07.08.2008, 13:07:13 | Сообщение # 4
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (wa_pogot)
кстати - если static - число - то при каждом вызове, если ее необнулять всевремя - то старое значение прибавляется к новому значению и увеличивается в 2 раза !

ты пьяный что ли? если к нему ничего не прибавлять и не домножать, то оно остается каким было.
 
marikcoolДата: Четверг, 07.08.2008, 16:17:17 | Сообщение # 5
Подполковник
Группа: Пользователи
Сообщений: 139
Репутация: 1
Статус: Не в сети
2wa_pogot я понял что ты имел ввиду, но выражать свои мысли надо ясней. дословно что ты написал выглядит так:
----------------
static test
test=2
test=2
----------------
test равен 4 )))
 
DaTaДата: Пятница, 08.08.2008, 02:35:53 | Сообщение # 6
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (wa_pogot)
короче static неиспользуйте для счетчика
лучше
new cucount = 0
потом
cucount++

счетчики бывают разные. Не давай советов(особенно когда не знаешь всех нюансов), которые вводят новичков в ступор.
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026