Глобальные переменные, статические члены данных и статика на уровне функций не принадлежат ни стеку, ни куче; также называется «статическая продолжительность хранения».

смущает распределение памяти в C ++ с точки зрения областей памяти, таких как область данных Const, Stack, Heap, Freestore, Heap и Global / Static. Я хотел бы понять схему распределения памяти в следующем фрагменте. Может ли кто-нибудь помочь мне понять это. Если есть что-то еще, кроме типов переменных, упомянутых в примере, чтобы помочь лучше понять концепцию, измените пример.

class FooBar
{
      int n; //Stored in stack?

      public:

          int pubVar; //stored in stack?

          void foo(int param)  //param stored in stack
          {
                int *pp = new int; //int is allocated on heap.
                n = param;
                static int nStat;  //Stored in static area of memory
                int nLoc;          //stored in stack?
                string str = "mystring"; //stored in stack?
                ..
                if(CONDITION)
                {
                    static int nSIf; //stored in static area of memory
                    int loopvar;     //stored in stack
                    ..
                }
          }
}

int main(int)
{
     Foobar bar;    //bar stored in stack? or a part of it?

     Foobar *pBar;  //pBar is stored in stack

     pBar = new Foobar();  //the object is created in heap?  What part of the object is stored on heap

}

РЕДАКТИРОВАТЬ:
Что смущает меня, еслиpBar = new Foobar(); хранит объект в куче, как получаетсяint nLoc; а такжеint pubVar;компоненты компонента хранятся в стеке? Звучит противоречиво для меня. Не должен жизньpubvar а такжеpBar быть таким же?

Ответы на вопрос(4)

Ваш ответ на вопрос