stl allocator主要分配及应用联想

来源:互联网 发布:手机wifi网络异常 编辑:程序博客网 时间:2024/06/01 08:15

stl allocator一直比较神秘,最近几天帮助同事在symbian调试类stl的类库有所触动。stl allocator有几个地方需要注意就可以了:

1.allocate主要功能是分配内存,而且一般来说是无类型的内存;

2.deallocate的主要功能是释放内存,与allocate配对使用。

 

3._Construct是针对于具体的元素或数据项的操作,主要是类的构造,具体涉及到的技术是new placement;
4._Destroy或_DESTRUCTOR与Construct相对的操作,主要用于析构;

注意:不论是对内置的类型(比如:int,char)还是对自定义的类型(比如class或struct)都存在构造函数和析构函数,即函数~int是合法并且可以编译run的。

 

现在问题比较明确了:

一、stl allocator使用allocate和deallocate来做大块内存的申请和释放,然后使用_Construct和_Destroy或_DESTRUCTOR在这块内存上做数据项的构造和析构,两者针对的对象完全不同。

二、allocate和deallocate是对new和delete或malloc和free的接口封装,甚至,可以使用栈上的内存。

三、内存池概念的封装。stl allocator本质上对内存申请和释放做了封装,这可以很方便引入了内存池的技术,而且是变通的内存池。

 

 

引申stl allocator的用法,我们甚至可以在一些需要频繁申请和释放内存的地方引入_Construct和_Destroy的概念;

比如:

在一个频繁使用的函数里:

class A;

void func()

{

    A* pA = new A(value);

 

    ...

    delete pA;

 

}

 

可以替换为:

class A;

void func()

{

    static char cBuffer[sizeof(A) ];

    _Construct(cBuffer,value );

 

    ...

    _Destroy(pA);

 

}

 

这样可以避免内存碎片,减少系统回收内存的工作压力;而且可以隐藏部门类库的实现方法。

 

以上只是灵感突发,至于实际上的应用价值需要实践检验。