分配器理解在C与C ++方面的差异

时间:2018-05-05 10:55:23

标签: c++ c dynamic-memory-allocation allocator

有很多关于分配器的讨论,但我找不到任何人解释我在寻找什么。

  1. C语言。 “allocator”通常意味着内存管理的逻辑 - 默认的malloc-family和最着名的高级版本,如tcmalloc和jemalloc。

  2. C ++语言。 “allocator”术语是标准库或自己编写的类模板。

  3. 如果我正在编写C ++应用程序并发现默认内存管理不符合我的要求,建议采用哪种方式:

    • 替换/改进malloc
    • 使用std :: allocator
    • 接口编写自己的allocator

    ...

1 个答案:

答案 0 :(得分:0)

如果以STL中的vector为例,您可以看到该对象与其内存分配的分离方式

template < class T, class Alloc = allocator<T> > class vector; // generic template

你可以看到:

  • vector是关于容器的
  • 你仍然需要分配内存,所以你需要指定它是如何完成的
    • 在大多数情况下,您不需要指定内存的分配方式,因此STL提供默认分配器来执行此操作
    • 某些情况(例如嵌入式系统),内存分配至关重要,因此您仍然可以通过提供自己的分配器来使用STL