Здравствуйте. Как лучше, создать глобальный массив и не парится с создаванием новых массивов или же лучше создавать каждый раз новый массив для форматирования?
Вид для печати
Здравствуйте. Как лучше, создать глобальный массив и не парится с создаванием новых массивов или же лучше создавать каждый раз новый массив для форматирования?
Инициализируя локальные массивы, ты не создаёшь новые массивы, а лишь резервируешь память стэка.
Стэк можно представить как один большой массив. Когда ты создаёшь переменную, нужное число из стэка "закрепляется" за этой переменной. Никакой новой памяти не выделяется.
А вот создавая глобальный массив, ты именно выделяешь новую память.
Хотя дело даже не в выделении или не выделении памяти, а в том, что с глобальным массивом повышается шанс допустить ошибку.
Например, у тебя есть код, в котором идёт работа с глобальным массивом и результат выдаётся в чат.
new gString[3000];
PHP код:
CMD:commandname(playerid, params[])
{
//...
format(gString, sizeof(gString), "Текст");
SendClientMessage(playerid, -1, gString);
return 1;
}
Тебе нужно написать похожий код, но только работать с локальным массивом или данными, переданными в параметре функции. Ты копируешь первый код, заменяешь глобальную переменную на локальную, но в одном месте (например, выводе сообщения в чат) ты не замечаешь эту самую глобальную переменную и не заменяешь её на локальную
Компилятор не выдаст никаких ошибок, так как функция gString существует для той строки, где мы забыли её заменить. Но вот код уже не будет работать так, как нужно. И тебе придётся тратить дополнительное время на то, чтоб обнаружить причину, по которой не выдаётся сообщение.PHP код:
public OnPlayerText(playerid, text[]);
{
//...
new string[MAX_CHATBUBBLE_LENGTH+1];
format(string, sizeof(string), "Текст");
SendClientMessage(playerid, -1, gString);//Вот тут забыл поменять
return 0;
}
А вот с локальными переменными такого не случится, ибо компилятор выплюнет ошибку и баг будет досрочно исправлен.
Собственно, во всех случаях, когда локальная переменная уместна - используй именно её.
UPD: Так как автор темы поставил "Спасибо" и больше никто не отписался, закрою тему и перемещу в ахив. Если вдруг у кого-то есть что добавить касаемо данного вопроса, можете отписать в личку и я открою тему