Глобальные переменные, статические члены данных и статика на уровне функций не принадлежат ни стеку, ни куче; также называется «статическая продолжительность хранения».
смущает распределение памяти в 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
быть таким же?