Объявлены ли константные массивы в функции, хранящейся в стеке? - PullRequest
3 голосов
/ 26 августа 2009

если это было объявлено внутри функции, будет ли оно объявлено в стеке? (это то, что заставляет меня задуматься)

void someFunction()
{

     const unsigned int actions[8] = 
     {       e1,
             e2,
             etc...
     };
 }

Ответы [ 4 ]

5 голосов
/ 26 августа 2009

Да, они в стеке. Вы можете увидеть это, взглянув на этот фрагмент кода: он должен будет напечатать сообщение об уничтожении 5 раз.

struct A { ~A(){ printf( "A destructed\n" ); } };

int main() {
    {
      const A anarray  [5] = {A()} ;
    }
    printf( "inner scope closed\n");
}
4 голосов
/ 26 августа 2009

Как я понимаю: да. Мне сказали, что вам нужно квалифицировать константы с помощью static, чтобы поместить их в сегмент данных, например,

void someFunction()
{
     static const unsigned int actions[8] = 
         {
             e1,
             e2,
             etc...
         };
}
2 голосов
/ 26 августа 2009

Если вы не хотите, чтобы ваш массив создавался в стеке, объявите его как статический. Константность может позволить компилятору оптимизировать весь массив. Но если он будет создан, он будет в стеке AFAIK.

0 голосов
/ 26 августа 2009

Да, нестатические переменные всегда создаются в стеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...