Доброго времени суток. В теме я хочу задать 2 похожих вопроса о правильном использовании памяти.
1) Почему в перехватываемой функции значительно увеличивается размер стека?
Приведу ситуацию:
В этом случае подсчет стека идет понятно как, и тут вроде бы все правильно.
Открыть/закрыть
В этом случае я подключил инклуд в котором используется перехват функции OnDialogResponse в которой использовал тот-же код что и в первом случае, казалось бы, стек должен остаться прежним, так-как я не повысил размер массива, но вдруг я вижу другую цифру и теряюсь в раздумьях.
Открыть/закрыть
Почему произошло увеличение размера стека?
Код инклуда который я подключил:
Открыть/закрыть
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DLG_TEST3:
{
new dialog[100];
format(dialog, sizeof(dialog), "%i %i %i", variable1, variable2, variable3);
}
case DLG_TEST4:
{
new dialog[100];
format(dialog, sizeof(dialog), "%i %i %i", variable1, variable2, variable3);
}
}
#if defined test__OnDialogResponse
return test__OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
#endif
}
#if defined _ALS_OnDialogResponse
#undef OnDialogResponse
#else
#define _ALS_OnDialogResponse
#endif
#define OnDialogResponse test__OnDialogResponse
#if defined test__OnDialogResponse
forward test__OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
#endif
2) Стоит ли в инклудах, где используется перехват функций использовать переменные static для создания массива?
Как один из вариантов решения который вроде-бы более-менее практичный (на мой взгляд):
Код:
case DLG_TEST3:
{
static dialog[100];
format(dialog, sizeof(dialog), "%i %i %i", variable1, variable2, variable3);
}
case DLG_TEST4:
{
static dialog[100];
format(dialog, sizeof(dialog), "%i %i %i", variable1, variable2, variable3);
}
Или-же вывести static dialog[100] в общий блок колбека.