Estoy confundido acerca de la asignación de memoria en C++ en términos de las áreas de memoria como área de datos Const, Pila, Pila, Freestore, Heap y área Global/Static. 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 entender mejor el concepto, por favor modifique el ejemplo.Asignación de memoria en C++
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
}
EDIT:
Lo que me confunde es, si pBar = new Foobar();
almacena el objeto en el montón, ¿cómo es que int nLoc;
y int pubVar;
, que son componentes del objeto almacenado en la pila? Suena contradictorio para mí. ¿No deberían la vida útil de pubvar
y pBar
ser la misma?
La mejor idea es dejar de pensar en el montón y la pila. Realmente no existen en C++ (es una construcción Java/C#). Piensa en la duración (duración) de un objeto. –
Waitaminute. La pila es una construcción de Java? Definitivamente no. Es un constructo C, si no es anterior. Pero 'setjmp/longjmp' dejó muy claro que C tiene una pila. Java, por otro lado, permite que los objetos escapen el alcance de la función, por lo que el concepto de pila no existe (memoria wrt; las excepciones son otra cuestión) – MSalters