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