Alocação de memória em C ++
Estou confuso sobre a alocação de memória em C ++ em termos de áreas de memória, como área de dados Const, Stack, Heap, Freestore, Heap e área Global / Estática. Gostaria de entender o padrão de alocação de memória no seguinte trecho. Alguém pode me ajudar a entender isso. Se houver algo mais além dos tipos de variáveis mencionados no exemplo para ajudar a entender melhor o conceito, altere o exemplo.
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
}
EDITAR:
O que me confunde é, sepBar = new Foobar();
armazena o objeto na pilha, comoint nLoc;
eint pubVar;
, que são componentes do objeto armazenado na pilha? Parece contraditório para mim. Não deveria a vida depubvar
epBar
ser o mesmo?