分配器 (C++) 在C编程中分配器英語allocator是C标准库的重要组成部分C的库中定义了多种被统称为容器的数据结构如链表集合等这些容器的共同特征之一就是其大小可以在程序的运行时改变为了实现这一点进行动态内存分配就显得尤为必要在此分配器就用于处理容器对内存的分配与释放请求换句话说分配器用于封装標準模板庫STL容器在内存管理上的低层细节默认情况下C标准库使用其自带的通用分配器但根据具体需要程序员也可自行定制分配器以替代之 分配器最早由亚历山大斯特潘诺夫英语Alexander Stepanov作为C标准模板库Standard Template Library简称STL的一部分发明其初衷是创造一种能使库更加灵活并能独立于底层数据模型的方法并允许程序员在库中利用自定义的指针和引用类型英语Reference C但在将标准模板库纳入C标准时C标准委员会意识到对数据模型的完全抽象化处理会带来不可接受的性能损耗为作折中标准中对分配器的限制变得更加严格而有鉴于此与斯特潘诺夫原先的设想相比现有标准所描述的分配器可定制程度已大大受限 虽然分配器的定制有所限制但在许多情况下仍需要用到自定义的分配器而这一般是为封装对不同类型内存空间如共享内存与已回收内存的访问方式或在使用内存池进行内存分配时提高性能而为除此以外从内存占用和运行时间的角度看在频繁进行少量内存分配的程序中若引入为之专门定制的分配器也会获益良多