если это было объявлено внутри функции, будет ли оно объявлено в стеке? (это то, что заставляет меня задуматься)
void someFunction() { const unsigned int actions[8] = { e1, e2, etc... }; }
Да, они в стеке. Вы можете увидеть это, взглянув на этот фрагмент кода: он должен будет напечатать сообщение об уничтожении 5 раз.
struct A { ~A(){ printf( "A destructed\n" ); } }; int main() { { const A anarray [5] = {A()} ; } printf( "inner scope closed\n"); }
Как я понимаю: да. Мне сказали, что вам нужно квалифицировать константы с помощью static, чтобы поместить их в сегмент данных, например,
static
void someFunction() { static const unsigned int actions[8] = { e1, e2, etc... }; }
Если вы не хотите, чтобы ваш массив создавался в стеке, объявите его как статический. Константность может позволить компилятору оптимизировать весь массив. Но если он будет создан, он будет в стеке AFAIK.
Да, нестатические переменные всегда создаются в стеке.