C++ allocator简记

    最近听同事说,某公司面试问到了C++ allocator相关的问题。

    allocator模版本质是stl容器对内存管理的一组需求,泛型编程里称之为concept。自己制作allocator时,只要满足这些需求就没有问题了。值得注意的是,allocator内一个很有趣的结构,不得不提,这就是rebind,它的目的就是:通过一个已具体化的allocator class得到另一个具体化的allocator class,这是对class的编程,可以认为是简单的模版元编程。例如allocator<int>::rebind<long>::other就是一个allocator<long>。

    rebind主要服务于stl链式容器,例如list。当list模版具体化为class时,可以指定list的元素类型和元素的内存分配策略(例如list<int, myallocator<int>>),但list节点的内存分配策略无法指定,事实上,list节点的内存分配策略应与元素的内存分配策略相同,这时就需要rebind生成list节点的allocator。

    最后吐槽一下,现时的allocator只能做内存分配管理,不能做地址模型适配,不知道以后会不会改变。

你可能感兴趣的:(C++)