Stack
存在于某作用域(scope)的一块内存空间,例如当你调用函数,函数本身会形成一个stack用来放置它所接收的参数以及返回地址。
在函数本体内声明的任何变量,其所使用的内存块都取自stack
Heap
是指由操作系统提供的一块global 内存空间,程序可动态分配从中获得若干区块
class Complex{.....};
...
{
Complex c1(1,2);//第一行
Complex* p = new Complex(3);//第二行
}
上述代码第一行c1所占用空间来自stack,离开作用域生命就会消失
如果加上stack Complex c1(1,2)
其生在作用域结束后仍然存在,直到整个程序结束
Complex(3)所占用空间是new 自行动态分配而得,并由p指向,必须手动delete掉
全局对象 :可以视为一种static object
new :先分配内存,再调用构造函数
delete:先调用析构函数,再释放内存
内存块 在vc下
动态分配的内存:
灰色是debug区域,红色是cookies用于给出和回收,00000040+1其中的1指现在给出内存区域 内存的分配应是16的倍数
数组的内存分配:
array new 一点要搭配array delete 不然会造成内存泄漏,造成内存泄漏的是所分配给创建对象的内存:(会把三个指针删除掉,但是从第二个指针开始,其指向对象的内存区域并不会被删除)