码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Memory Management

时间:2018-06-02 16:31:36      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:返回   c++   ring   标准库   man   过程   构造函数   特性   tor   

Primitives

技术分享图片

 

技术分享图片

直接调用分配器的使用情况。

技术分享图片

技术分享图片

内存 管理都是 用内存池来进行管理的。

new 表达式 分为一下几步。

分配内存 返回的是void *类型

类型转换,调用static_cast进行类型转换

调用构造函数  直接调用构造函数只有编译器才可以直接调用,需要调用placement new在这个对象地址上面构造对象。

返回指向对象的地址。

 技术分享图片

上面operator new的源码中是使用for循环来一直进行内存的malloc,如果直接成功,就直接返回,如果失败,就对调用你自己设置的在内存分配失败的时候需要执行的动作,这是C++提供的一种在内存分配失败的时候的机制。这个函数时保证不抛异常的,C++11中可以使用noexcept这一新特性。

技术分享图片

delete的过程 会先调用析构函数 然后将内存释放调。

 string在标准库里面是一个typedef,真正的名称是basic_string。

 技术分享图片

这里指的内存泄漏 是由于析构函数没有调用而导致的。不是array本身,而是上图的这种情况没有调用析构函数造成的。

 在进行array new表达式的使用的时候,是没有机会进行对象的初值,因此需要一个默认构造函数来进行数据的初始化。

技术分享图片

 

VC6下的内存布局。技术分享图片

技术分享图片

array的大小被写到了内存块当中的cookie当中了,因此会占用更多的内存资源空间。

技术分享图片

技术分享图片

 

C++ Memory Management

标签:返回   c++   ring   标准库   man   过程   构造函数   特性   tor   

原文地址:https://www.cnblogs.com/randyniu/p/9125618.html

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