Asignación de memoria en C ++
Estoy confundido acerca de la asignación de memoria en C ++ en términos de las áreas de memoria, como el área de datos Const, Stack, Heap, Freestore, Heap y el área Global / Estática. Me gustaría entender el patrón de asignación de memoria en el siguiente fragmento. ¿Alguien puede ayudarme a entender esto? Si hay algo más aparte de los tipos de variables mencionados en el ejemplo para ayudar a comprender mejor el concepto, modifique el ejemplo.
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:
Lo que me confunde es, sipBar = new Foobar();
almacena el objeto en el montón, ¿cómo es queint nLoc;
yint pubVar;
, que son componentes del objeto almacenado en la pila? Me suena contradictorio. No debería la vida depubvar
ypBar
¿ser el mismo?