内存架构
什么是内存泄漏?
简单说就是申请了一块内存地址,使用完毕之后没有释放,造成了内存泄漏。
具体体现为:
new
和malloc
申请资源使用后,没有用delete
和free
释放。- 子类继承父类时,父类的析构函数不是虚函数。
windows
句柄资源使用后没有释放。
如何检测内存泄漏?
- 使用了内存分配的函数,使用完之后记得释放。
- 将分配内存的指针以链表的形式保存管理,使用完毕后从链表中删除,程序结束时检查改链表。
- 使用智能指针。
- 使用其他工具:
linux
下ccmalloc
为什么要内存对齐
需要字节对齐的根本原因在于CPU访问数据的效率问题
内存对齐的具体体现
内存对齐用于三种数据类型中:class/struct/union
-
数据成员对齐规则:结构(struct)或联合(union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小的整数倍开