-
Static
Всем привет.
Сейчас у меня появился такой вопрос, когда читал тему
и заметил
Цитата:
PHP код:
public OnPlayerUpdate( playerid )
{
static // Я использую здесь статистические переменные, ибо они не будут вызываться каждый раз
s_Keys,
s_UpDown,
s_LeftRight
;
Цитата:
PHP код:
static // Я использую здесь статистические переменные, ибо они не будут вызываться каждый раз
я так понял что можно в сек. таймере вместо
PHP код:
new string[128];
будет лучше использовать (?)
PHP код:
static string[128];
Спасибо.
-
Static не будет очищатся при каждой итерации вроде
-
static в первом примере используется для того, чтобы снизить требования к памяти: для создания и уничтожения локальной переменной с помощью new уходит 2 инструкции: push <начальное значение> (эта инструкция занимаеи в памяти 8 байт) и stack 4 (ещё 8 байт), а со static переменная не создаётся в стеке, а всё время находится в секции данных и занимает 4 байта, при этом её нельзя ни создать, ни уничтожить, как в стеке. В итоге имеем 16 байт с new и 4 со static - отсюда и экономия.
Что касается массивов, то с new на их создание и уничтожение тратится от 40 до 44 байт (инструкции варьируются в разных случаях), поэтому выгода будет только в том случае, когда размер массива меньше 10 (40/4) ячеек. Правда, при создании массива с помощью new также будет затрачено время на инициализацию его ячеек изначальными значениями, но это время крайне мало и им можно пренебречь.
Также static можно использовать для изоляции глобальных переменных в пределах одного файла (например, в пределах инклуда), но в вашем примере совсем не тот случай.
Tl;dr: Если вы не разбираетесь во всём вышеописанном, лучше не используйте static.