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

Тема: Флаги

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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±

    Флаги

    Всем салют.

    Вопрос по флагам. Для начала покажу код, затем скажу, а то нихрена не объясню нормально. )))

    1.
    PHP код:
    enum Flags:(<<= 1)
    {
        
    LOGGED true,
        
    //тут будут остальные переменки с bool значением
    }
    new 
    Flags:pFlag[MAX_PLAYERS]; 
    2.
    PHP код:
    new bool:pLogged[MAX_PLAYERS char]; 
    Сам вопрос: что эффективнее? почему?

    Слова автора:
    Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
    Однако, если вы будете использовать 4 массива с флагами, то вы затратите только 8 КБ.
    Т.е выходит, что вы сэкономите 187 КБ, довольно не плохо, правда?
    Искал урок по #emit, наткнулся на это, и сильно таки заинтересовал вопрос, где правда.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от BadPawn Посмотреть сообщение
    Сам вопрос: что эффективнее? почему?
    Смотря, что для вас важнее: производительность или расход памяти.
    В одной ячейке 32 бита (4 байта) и если использовать их все, то можно нехило сэкономить память. Но следует учесть и то, что для достижения такой экономии при каждом обращении к переменной приходится выполнять побитовые сдвиги, сложение, etc., из-за чего доступ к переменной с флагами становится медленнее, чем к обычной переменной, т.е. приходится жертвовать производительностью.

    Кроме того, для выполнения тех побитовых операций будут генерироваться дополнительные инструкции в секции кода, которые будут занимать лишнее место (да, код, как и данные, тоже имеет размер). Как результат, выгода от использования флагов может свестись на нет как в плане производительности, так и в плане расхода памяти.

    Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
    Однако, если вы будете использовать 4 массива с флагами, то вы затратите только 8 КБ.
    Вот только в реальности вряд ли можно встретить структуру инфы об игроке с 100 и более переменными типа bool. Разве что если есть какая-нибудь система достижений - вот такое точно следует переводить на флаги.

    Как вы могли уже понять, нельзя однозначно говорить о пользе/вреде использования флагов - всё зависит исключительно от ситуации, в которой вы хотите их использовать.
    В общем, это довольно сложная тема, не предназначенная для новичков, и если вы что-то не поняли из моих слов выше, лучше делайте всё по старому и не усложняйте себе жизнь, раз не понимаете, что к чему в этих флагах.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. 4 пользователя(ей) сказали cпасибо:
    BadPawn (27.03.2016) Nash_Brigers (27.03.2016) Seregamil (27.03.2016) [ForD] (27.03.2016)
  4. #3
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    PHP код:
    player_logged_in[MAX_PLAYERS char]; 
    будет достаточно :D

  5. #4
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Смотря, что для вас важнее: производительность или расход памяти.
    В одной ячейке 32 бита (4 байта) и если использовать их все, то можно нехило сэкономить память. Но следует учесть и то, что для достижения такой экономии при каждом обращении к переменной приходится выполнять побитовые сдвиги, сложение, etc., из-за чего доступ к переменной с флагами становится медленнее, чем к обычной переменной, т.е. приходится жертвовать производительностью.
    Зачарованная переменная станет медленнее PVar?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. #5
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Зачарованная переменная станет медленнее PVar?
    обычная < флаг < пвар

  7. #6
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от TheMallard Посмотреть сообщение
    обычная < флаг < пвар
    обычная то обычная, а зачарованная где)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  8. #7
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    Обычная и char по идее должны быть одинаково быстрыми.

  9. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    обычная то обычная, а зачарованная где)
    char - всего лишь оператор. Пройди в раздел с уроками и прочти статью на эту тему от DC. Там всё рассказано
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

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

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

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

Ваши права

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