1.stack 是存在与某个作用域的一块内存空间,当调用函数时,函数就会形成一个stack 存这它的一些参数、返回地址等,生闷气在函数执行完会自动消灭;

2.heap 是操作系统提供的全局的内存空间,是动态分配的(new),用完了需要手动delete,不然在作用域外还会占用内存,会造成内存泄漏;

3.static 静态的,生命期直到程序结束;

4.全局变量,生命期为整个程序;

5.new 会先分配空间,在调用构造函数;

6.delete 会先调用析构函数,再释放内存;

7.动态分配内存实际不止分配其类型所占的内存,比如complex其有8个字节:

在debug下会有原complex占的8个字节 + debug要用到的32 + 4 个字节 + 上下2 个cookie的8个字节,因为内存一定要是16的倍数,所以还可能会补一些空的字节填充:

实际运行减掉debug的字节在填充到16倍数的字节就可以。cookie里标识所含字节数,在内存生成时在低位取1,所以是其字节数+1,释放时就正常取0;

7.对于动态分配的array,会加一个4字节的表示array 的个数:

8.为什么new array 删除时要用 delete[ ]呢?因为只用delete 的话只会唤醒一次delete,删除的只有array[0],用delete[ ]就算告诉编译器它是数组还可能有要删的内存,不然会导致内存泄漏!

分类: 未分类

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注