Просмотр полной версии : [Вопрос] Флаги
Всем салют.
Вопрос по флагам. Для начала покажу код, затем скажу, а то нихрена не объясню нормально. )))
1.
enum Flags:(<<= 1)
{
LOGGED = true,
//тут будут остальные переменки с bool значением
}
new Flags:pFlag[MAX_PLAYERS];
2.
new bool:pLogged[MAX_PLAYERS char];
Сам вопрос: что эффективнее? почему?
Слова автора:
Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
Однако, если вы будете использовать 4 массива с флагами, то вы затратите только 8 КБ.
Т.е выходит, что вы сэкономите 187 КБ, довольно не плохо, правда?
Искал урок по #emit, наткнулся на это, и сильно таки заинтересовал вопрос, где правда.
Daniel_Cortez
27.03.2016, 10:10
Сам вопрос: что эффективнее? почему?
Смотря, что для вас важнее: производительность или расход памяти.
В одной ячейке 32 бита (4 байта) и если использовать их все, то можно нехило сэкономить память. Но следует учесть и то, что для достижения такой экономии при каждом обращении к переменной приходится выполнять побитовые сдвиги, сложение, etc., из-за чего доступ к переменной с флагами становится медленнее, чем к обычной переменной, т.е. приходится жертвовать производительностью.
Кроме того, для выполнения тех побитовых операций будут генерироваться дополнительные инструкции в секции кода, которые будут занимать лишнее место (да, код, как и данные, тоже имеет размер). Как результат, выгода от использования флагов может свестись на нет как в плане производительности, так и в плане расхода памяти.
Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
Однако, если вы будете использовать 4 массива с флагами, то вы затратите только 8 КБ.
Вот только в реальности вряд ли можно встретить структуру инфы об игроке с 100 и более переменными типа bool. Разве что если есть какая-нибудь система достижений - вот такое точно следует переводить на флаги.
Как вы могли уже понять, нельзя однозначно говорить о пользе/вреде использования флагов - всё зависит исключительно от ситуации, в которой вы хотите их использовать.
В общем, это довольно сложная тема, не предназначенная для новичков, и если вы что-то не поняли из моих слов выше, лучше делайте всё по старому и не усложняйте себе жизнь, раз не понимаете, что к чему в этих флагах.
TheMallard
27.03.2016, 17:01
player_logged_in[MAX_PLAYERS char];
будет достаточно :D
vovandolg
01.04.2016, 05:07
Смотря, что для вас важнее: производительность или расход памяти.
В одной ячейке 32 бита (4 байта) и если использовать их все, то можно нехило сэкономить память. Но следует учесть и то, что для достижения такой экономии при каждом обращении к переменной приходится выполнять побитовые сдвиги, сложение, etc., из-за чего доступ к переменной с флагами становится медленнее, чем к обычной переменной, т.е. приходится жертвовать производительностью.
Зачарованная переменная станет медленнее PVar?
TheMallard
09.04.2016, 03:25
Зачарованная переменная станет медленнее PVar?
обычная < флаг < пвар
vovandolg
09.04.2016, 08:48
обычная < флаг < пвар
обычная то обычная, а зачарованная где)
TheMallard
09.04.2016, 10:35
Обычная и char по идее должны быть одинаково быстрыми.
обычная то обычная, а зачарованная где)
char - всего лишь оператор. Пройди в раздел с уроками и прочти статью на эту тему от DC. Там всё рассказано
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot