malloc分配内存的结构
在C/C++,我们都可以使用malloc进行分配大小,单位是字节。 malloc实际分配的内存大小和传入的参数其实是不同的。 实际分配的内存大小>传入的参数大小。
malloc分配的内存结构:
- Cookies信息(头部,尾部信息):记录malloc块的信息,搭配free。
- 调试模式下的信息(运行时不存在) 32B
- 数组长度(如果是单个元素,没有该项) 4B
- 真实数据
- Pad(填充块) :对齐
单个对象下,调试模式和运行情况。
数组模式下的图例。
另外讨论一个问题:new和delete封装malloc和free,new[]和delete[]要搭配在一起。 但是在某些情况下new[]和delete在一起也能正常工作,但某些情况下不能,这是为什么?
如果通过new分配的数组元素是对象,而不是指针,那么能够正确地释放,它们会根据内部的长度字段,执行析构函数,并且回收内存。但是,如果是指针,只会执行第一个指针单元所指向对象的析构函数,而不会执行接下来指针单元所指向对象的析构,因此可能会造成内存泄露。