Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1496519
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类: C/C++

2009-06-14 23:52:52

读书笔记—C++Primer中的内存优化读书笔记

注意内存分配和类型的初始化是两个不同的概念

优化内存的一个关键的技术:使用内存池

这样就引出一个问题,怎样将内存分配和对象的构造相分离。就像Vector一样的实现相应的内存的预分配。

allocator类将相应的内存的分配和对象的构造(也就是对象的初始化(注意初始化和赋值是两回事))相分离,allocator类是template-based

allocator类中的allocate方法和deallcate方法进行分配、释放相应的内存

allocator类中的construct方法和destory方法构造(初始化)和析构相应的对象

注意allocator分配的是类型化的内存

operator new函数和operator delete函数分配的是未类型化的内存,怎么分配为类型化的内存?哈哈,看看下面这个声明我们就知道了

void * operator new(size_t);

void * operator new[](size_t);

他返回的是void* 的指针,void * 可以经过相应的static_cast显示转化为相应的类型的指针

这里的size_t是指的该类型在内存中的大小,一般使用sizeof来进行得到,看来operator new没有相应的allocate方法简单啊,实际上也是。

上面的operator new方法和allocator类中的allocate方法都是进行的是内存的分配,得到的都是相应的raw memory,不同点是operator new方法分配的是未类型化的内存,而allocate方法分配的是类型化的内存。

相对应于operator new方法和allocator类中的allocate方法allocator类中的construct方法对应的方法是:定位new表达式,进行对象的初始化

new (place_address) type

new (place_address) type(initializer-list)

construct方法只能使用相应的copy构造函数,而使用定位new表达式可以使用任意的构造函数

阅读(997) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~