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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 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
    new fuck_logic[0] = EOS;

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

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

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

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

  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
    Сообщений
    204
    Репутация:
    38 ±
    PHP код:
    player_logged_in[MAX_PLAYERS char]; 
    будет достаточно :D

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    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
    Сообщений
    204
    Репутация:
    38 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Зачарованная переменная станет медленнее PVar?
    обычная < флаг < пвар

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    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
    Сообщений
    204
    Репутация:
    38 ±
    Обычная и char по идее должны быть одинаково быстрыми.

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

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

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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