码迷,mamicode.com
首页 > 其他好文 > 详细

malloc分配内存的结构

时间:2020-02-07 01:28:21      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:对齐   bsp   组元   cookies   字段   因此   http   头部   png   

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

 

malloc分配的内存结构:

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

 

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

技术图片

 

 

数组模式下的图例。

技术图片

 

 

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

技术图片

 

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

malloc分配内存的结构

标签:对齐   bsp   组元   cookies   字段   因此   http   头部   png   

原文地址:https://www.cnblogs.com/yy-1046741080/p/12271601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!