Привет. Сразу кину код, который не понимаю, я взял его где-то на форуме.
Код:
stock ShowDialogRegister(playerid) {
static const text_box_register[] =
"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n" \
"{ffffff}Ваш аккаунт %s не найден в нашей базей данных\n\n" \
"Пройдите процесс регистрации\n" \
"Введите пароль\n\n" \
"Максимальная длина пароля - 15 символов";
new string[sizeof(text_box_register) - 2 + MAX_PLAYER_NAME + 1];
format(string, sizeof(string), text_box_register, PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, !"{1976D2}Регистрация", string, !"Далее", !"Отмена");
}
В теме, откуда я взял этот код, человек спрашивает, можно ли как-то еще оптимизировать этот кусок кода. Ему говорят, что все уже по максимуму оптимизировано, все норм. И постоянно вижу, что советуют делать именно так: объявлять строку как static const.
Почему используется "static const"? const понятно, почему. Строка не будет меняться. А static для чего? Согласно правилам, если объявить переменную как static внутри функции, то она не будет удаляться из памяти между вызовами функции. Ок. Значит, она хранится не в стеке, а в другом месте - в некоем "сегменте данных". Я хорошо понимаю, что такое стек, но можете объяснить мне что такое "сегмент данных"? Плюс я не понимаю, зачем так делать? Хранить эту строку на постоянной основе где-то там в памяти, вместо того, чтобы она при каждом вызове заново конструировалась, когда понадобится, она ведь не такая большая даже. Есть ли какие-нибудь тесты, которые наглядно демонстрируют преимущества данного подхода?