Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3

Тема: Static

  1. #1
    Аватар для Unreal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.09.2014
    Сообщений
    133
    Репутация:
    4 ±

    Static

    Всем привет.

    Сейчас у меня появился такой вопрос, когда читал тему
    и заметил

    PHP код:
    public OnPlayerUpdateplayerid )
    {
        static 
    // Я использую здесь статистические переменные, ибо они не будут вызываться каждый раз 
            
    s_Keys,
            
    s_UpDown,
            
    s_LeftRight
        

    PHP код:
    static // Я использую здесь статистические переменные, ибо они не будут вызываться каждый раз 
    я так понял что можно в сек. таймере вместо
    PHP код:
    new string[128]; 
    будет лучше использовать (?)
    PHP код:
    static string[128]; 
    Спасибо.
    Pro-pawn.ru

  2. #2
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Static не будет очищатся при каждой итерации вроде

  3. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    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.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. 3 пользователя(ей) сказали cпасибо:
    gangzone.ini (22.10.2015) Geebrox (22.10.2015) Unreal (22.10.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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