malloc分配内存的结构

Posted yy-1046741080

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了malloc分配内存的结构相关的知识,希望对你有一定的参考价值。

在C/C++,我们都可以使用malloc进行分配大小,单位是字节。   malloc实际分配的内存大小和传入的参数其实是不同的。   实际分配的内存大小>传入的参数大小。

 

malloc分配的内存结构:

  • Cookies信息(头部,尾部信息):记录malloc块的信息,搭配free。
  • 调试模式下的信息(运行时不存在)  32B
  • 数组长度(如果是单个元素,没有该项)  4B
  • 真实数据
  • Pad(填充块) :对齐

 

单个对象下,调试模式和运行情况。

技术图片

 

 

数组模式下的图例。

技术图片

 

 

另外讨论一个问题:new和delete封装malloc和free,new[]和delete[]要搭配在一起。   但是在某些情况下new[]和delete在一起也能正常工作,但某些情况下不能,这是为什么?

技术图片

 

 如果通过new分配的数组元素是对象,而不是指针,那么能够正确地释放,它们会根据内部的长度字段,执行析构函数,并且回收内存。但是,如果是指针,只会执行第一个指针单元所指向对象的析构函数,而不会执行接下来指针单元所指向对象的析构,因此可能会造成内存泄露。

以上是关于malloc分配内存的结构的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 malloc 为 C 中的结构创建动态内存分配?

数据结构与算法基础之malloc()动态分配内存概述

如何为结构本身及其成员分配内存

尝试使用 malloc() 分配一个包含内部集合的结构来堆内存 [重复]

内存动态分配与释放

malloc分配内存进行对齐的操作