PDA

Просмотр полной версии : [Вопрос] String all player



seriu
01.08.2014, 00:35
Всем привет.

Будет ли нагрузка на мод если сделать так.


enum pinfo
{
pCMDstr[512]
}
new PI[MAX_PLAYERS][pinfo];

использование:

format(PI[playerid][pCMDstr],...

Помню мне кто-то сказал если будет онлайн большой то сервер накроется медным тазом. Верно ли это?
на сколько я знаю размер стека 16384 байт

если судить по теории что мне сказали выше то это, 512*500 = 256000, что в 15.6 раз превышает раз стека.

но
опять же судя по ^

если использовать так:


enum pinfo
{
pName[24],
pIp[16]
}
new PI[MAX_PLAYERS][pinfo];

public OnPlayerConnect(playerid)
{
GetPlayerName(playerid,PI[playerid][pName],24);
GetPlayerIp(playerid,PI[playerid][pIp],16);
return 1;
}
то получается: 24*500 = 12000 / 16*500 = 8000 / 12000+8000 = 20000 что тоже превышает размер стека.

Собственно вопрос такой, размер стека действительно так увеличивается или он останавливается на 512+24+16 ?


модераторам: извиняюсь, забыл добавить тэг [вопрос], добавьте если не трудно.

Salvacore
01.08.2014, 01:10
Добавил.Будьте бдительнее :)

Пельмень
01.08.2014, 01:22
Не совсем так, 1 ячейка = 4 байта, в твоём случае получится 512 + MAX_PLAYERS (500 по дефолту) = 1012 * 4 = 4048!
Во втором случае потребуется на много меньше памяти. 24 + 16 + MAX_PLAYERS (500 по дефолту) = 540 * 4 = 2160!

Salvacore
01.08.2014, 01:22
А зачем создавать глобально, если можно локально?

seriu
01.08.2014, 01:26
А зачем создавать глобально, если можно локально?

если создать одну new str[512];

и каждый раз когда игроки используют что-то то format не всегда срабатывает т.к не успевает и получается немного не то что должно быть

Пельмень
01.08.2014, 01:30
А зачем создавать глобально, если можно локально?
Ну, например, если сделать в pInfo Name [24], в коннекте записывать в массив имя, то можно будет узнавать имя игрока, вызвав лишь эту переменную :)

- - - Добавлено - - -


если создать одну new str[512];

и каждый раз когда игроки используют что-то то format не всегда срабатывает т.к не успевает и получается немного не то что должно быть

Дело не в этом, можно обнулять глобальный массив перед новым использованием str [0] = 0; А вообще, я бы рекомендовал использовать локальные массивы, чем один глобальный, тогда таких траблов точно не произойдёт :) Не стоит для каждого игрока выделять глобальный массив, это слишком затратно.