1.Complex c1(1,2);//这表示c1占用的空间来自stack。这个stack是作用域内的空间。例如函数调用时会创建一个stack,用来存放接收的参数和返回地址。调用结束自己释放。
2.Complex* p=new Complex(3);//p指向的内容存放在heap(或者称system
heap)里,使用结束要手动释放。否则会造成内存泄漏(memory leak)。因为指针p会被清理,但它指向的内容不会被清理。
3.1中的c1又称auto object,auto表示会被自动清理
4.Static对象的生命在作用域(scope)之后仍然存在,直至整个程序结束。
5.Cpp的new时先分配memory再调用构造函数。如:complex *pc = new complex(1,2);编译器把new转化为:void* mem = operator new(sizef(complex)); pc =
static_cast(mem);//转型pc->complex::complex(1,2);new的内部调用的是malloc(n)
6.delete编译器化为先调析构函数,再释放指针内存
7.分配出的内存状态:头尾有cookies,4个字节,中间有系统给的32+4个字节的空间,如果是数组,还有4字节的空间储存数组元素个数。
8.Array new要array delete。即delete后加[]
网友评论