Memory allocation patterns in C++
- by Mahatma
I am confused about the memory allocation in C++ in terms of the memory areas such as Const data area, Stack, Heap, Freestore, Heap and Global/Static area. I would like to understand the memory allocation pattern in the following snippet. Can anyone help me to understand this.
If there any thing more apart from the variable types mentioned in the example to help understand the concept better please alter the example.
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:
What confuses me is, if pBar = new Foobar(); stores the object on the heap, how come int nLoc; and int pubVar;, that are components of the object stored on stack? Sounds contradictory to me. Shouldn't the lifetime of pubvar and pBar be the same?