c++中allocator的使用
对于刚刚接触c++的程序员对于allocator这个东西可能感到莫名其妙,我这里记录了自己在学习c++过程中对allocator的理解。
首先,我们要知道的一件事情是c++对于内存的分配方法。我们向比较一下c和c++中内存使用的差异来说明allocator的必要性。
在c语言中我们使用malloc.h中的malloc,realloc等等函数来向系统申请内存。这种策略的优点是无论是请求大小的内存都可以达到较高的分配效率,这是由c语言本身所处的中级语言性质决定的。而对于c++虽然兼容c的语法但是已经是一种全新的语言,也就是说我们不应该将c语言中的许多思维习惯带进c++的世界。c++的new以及new[]等操作符对应malloc,以realloc等内存请求函数。区别是new,new[]对malloc等函数的一种wrapper,之所以要做这种wrapper取决于c++的构造函数特性(详细这里不讲解),而对于这种策略来服务于较大的object是比较有“性价比”的(杀牛自然用牛刀嘛^_^);而对于一些small的object的时候,就没有什么优势了(牛刀杀鸡)。我们是不是一定要向这种死板的策略低头呢,答案是否定的。c++是一种优秀的编程语言(尽管比较难学习),它不会这么“木头”,我们可以认为的改变默认的内存策略(这个在我的"c++零碎知识(一)"中有)。
以上介绍了c和c++在内存使用的不同之处,现在言归正传,allocator是c++的STL中针对不同模板的特点而实现的一种内存分配器。默认的情况下我们不必关心这个东西,因为库中已经为相应的模板实现了缺省的allocator(一般是倒数第二个参数)。正是这个allocator可以使得STL中的各种类型的模板达到最佳的效率,如果我们希望改变默认的allcator该怎么办?很简单实现一个具有allocator功能的class在构在STL模板实例的时候传递给它就可以了(我在c++零碎知识(一)实现了一个很简单的allocator)。
实例:
vector
vInt;//默认的allocator被使用
vector vIntMy;//使用自定义的myAllocator
这个问题到这里。
阅读(8041) | 评论(1) | 转发(0) |