Оптимизация кода
#61

У меня в админке старой навалом таких массивов с флагами, везде значения 1 и 0 в них юзаются. Я сделал все с char. Все также как часы и памяти кушает в 4 раза меньше.

Представляю сколько таких массивов с флагами в РП модах ((:
Reply
#62

Quote:
Originally Posted by MX_Master
У меня в админке старой навалом таких массивов с флагами, везде значения 1 и 0 в них юзаются. Я сделал все с char. Все также как часы и памяти кушает в 4 раза меньше.

Представляю сколько таких массивов с флагами в РП модах ((:
а если я туда буду записывать не только 1 и 0, а скажем 0,1,2,...,9 или true/false работать будет?
Reply
#63

слух а им какие значения мона задавать токо 1 и 0? или моно еще 12345 6435

и зачем тут знак !

Code:
stock packedStr [ 128 char ] = !"Cтрока, в которой символ занимает не 4 байта, а всего 1";
Reply
#64

Упакованные строки вам не пригодяться в явном виде, т.к. с ними стандартные функции не работают.

Значения от 0 до 255

true это 1 или больше, а false это 0, так гласит язык
Reply
#65

слух не подскажеш как с этой всей багадельнёй сделать enum структуры
Reply
#66

Quote:
Originally Posted by MX_Master
true это 1 или больше, а false это 0, так гласит язык
я про bool, а отрицательные значения можно?
Reply
#67

stepmex,
Code:
stock bool:arr[ 500 char ];
arr{1} = true;
Вроде по законам логики должно прокатить

Romanius,
enum - не структуры, а сложный тип данных. А что тебя смущает?
Смысла в нём я вообще не вижу
Reply
#68

имелось ввиду такое?

Code:
enum myType
{
  someArray [ 128 char ],
  someVar,
  Float: someFLoatVar
}

new mySpecialArray [ 500 ] [ myType ];
// вместо 500 поставить 500 char можно, но это не тот эффект совсем
// 500 тут кол-во элементов, а не ячеек
кто знает, значение типа bool: в pawn сколько бит/байт занимает?
Reply
#69

Quote:
Originally Posted by MX_Master
Т.е. если я правильно понял,то можно код такого типа:

pawn Code:
new Player[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
Player[playerid]=1
return 1;
}
и т.д.
Заменить на:

pawn Code:
new Player[500 char];

public OnPlayerConnect(playerid)
{
Player[playerid]=1 //Только данная переменная не может принимать значения более 255
return 1;
}
и т.д.
Reply
#70

Quote:
Originally Posted by RAEN
Заменить на:

pawn Code:
new Player[500 char];

public OnPlayerConnect(playerid)
{
Player[playerid]=1 //Только данная переменная не может принимать значения более 255
return 1;
}
и т.д.
угу, но всё таки лучше бы ты юзал bool
Reply
#71

PHP Code:
new count = -1;
for(new 
f;-!= f;strfind(text," ",true, ++f))count++; 
Reply
#72

надо бы сравнить скорость выполнения

PHP Code:
while(!= -1)
{
    
strfind(cmdtext[i], " "_1);
    
count++;

Reply
#73

Что именно делает этот код? кол-во пробелов подсчитывает? зачем это нужно ваще? (:
Reply
#74

Quote:
Originally Posted by Romanius
View Post
надо бы сравнить скорость выполнения
PHP Code:
while(!= -1)
{
    
strfind(cmdtext[i], " "_1);
    
count++;

в приведенном коде баг, если strfind вернет -1 счетчик все равно прибавит +1 и только потом отключится.

Quote:
Originally Posted by MX_Master
View Post
Что именно делает этот код? кол-во пробелов подсчитывает? зачем это нужно ваще? (:
да, а фиг его знает, может автор хочет вести статистику символов вчате, сколько раз каждую букву ввели и кто.
Reply
#75

ваш код всё равно медленнее чем

for(new j=0, count=0; text[j] != 0; j++) if(text[j] == ' ') count++;
Reply
#76

Quote:
Originally Posted by Aleks10
View Post
ваш код всё равно медленнее чем

for(new j=0, count=0; text[j] != 0; j++) if(text[j] == ' ') count++;
Все же нет этот помедленне я протестил

и я забыл убрать cmdtext[i] и прочее ну я скоро выпущу рейлиз а там и увидите
Reply
#77

Quote:
Originally Posted by Aleks10
View Post
ваш код всё равно медленнее чем

for(new j=0, count=0; text[j] != 0; j++) if(text[j] == ' ') count++;
давай смотреть логически:
  • берем строку из 200 символов в котрой 3 пробела
  • твой код обрабатывается 200 раз для каждого символа
  • наш 4 раза, 3 раза для пробелов и 1 раз до уонца строки.
Дак что ты там говорил про медленнее?

ЗЫ кстати не text[j] != 0, а j < sizeof(text), сервак крешется когда происходит обращение к несуществующей ячейки массива, а в массиве из 200 ячеек 200ой нет.
Reply
#78

Quote:
Originally Posted by Stepashka
View Post
сервак крешется когда происходит обращение к несуществующей ячейки массива.
не крешится, просто прекращает выполнение текущего калбека (к примеру если обращение было при выполнении OnGameModeInit то он просто обрывается на этом а сервер работает дальше)
Reply
#79

Alex009, у меня падал, правда там массив был двухмерный.
Reply
#80

Quote:
Originally Posted by Stepashka
View Post
давай смотреть логически:
  • берем строку из 200 символов в котрой 3 пробела
  • твой код обрабатывается 200 раз для каждого символа
  • наш 4 раза, 3 раза для пробелов и 1 раз до уонца строки.
Дак что ты там говорил про медленнее?
ну так strfind перебирает каждый раз строку в поисках пробелов
если тема волнует - пишите тесты (GetTickCount в помощь)
Quote:
Originally Posted by Stepashka
View Post
ЗЫ кстати не text[j] != 0, а j < sizeof(text), сервак крешется когда происходит обращение к несуществующей ячейки массива, а в массиве из 200 ячеек 200ой нет.
надо text[j] && j<sizeof text
чтоб не перебирать лишние ячейки и не выйти за пределы массива если нет нуль-символа (хотя он должен там быть)
Reply


Forum Jump:


Users browsing this thread: 16 Guest(s)