持之以恒
分类: 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表达式可以使用任意的构造函数