Thinking in C++ ---- Memory Allocation

来源:互联网 发布:tplink tl wn725n mac 编辑:程序博客网 时间:2024/06/08 04:35

C++ lecture has finished, and tomorrow we'll have our exam. Through this period, I find I learnt a lot and finally felt in love with programming.

It's the best time to review the knowledge and think about it.

The followings are my understandings:

Memory Allocation

We should tell stack and heap apart. 

Stack is the place to place normal variables. Normal variables, I mean, are the variables we use most, like "int a", "double b", "Animal ani"...

Heap is the place to place dynamic variables, this kind variable is created by using "new" operator, like "new int()", "new Animal()"...

Let's think about an example:

int *ptr = new int();
Here, ptr is a pointer which belongs to normal variables, so it is stored in stack. Yet, the content the pointer points to is created by "new" operator, so it is stored in heap.

Let's think about it more clearly with pics:

Part 1  stack only:


Here, i, j and object are all normal variables, so they are stored in stack.


Now, we enter fun2(), and fun2() has a normal variable "object", so it is also stored in stack.


Now, we exit fun2(), so the object created when we entered fun2() is deleted from stack.


Finally, we exit the main() function, so all variables created when we entered main() is deleted from stack.

In conclusion: stack-resident is the object created automatically when the program is executed and cleaned when the program is over.

Part 2 Heap and Stack


we can see the pointer is stored in stack, but the content of the pointer created by "new" operator is stored in heap.


Now, we exit the main() function, so all variables in stack are removed, but the object in heap cannot be removed automatically in C++. (In java, it can be removed)

What if we add "delete object" in our code?



Before we exiting from the main() function, we delete the object stored in heap manually by using "delete".


Finally, all variables are removed.


Reference: The pics are from my teacher's lecture material.

0 0