GCC 是如何实现 C++ 标准分配器的?

How does GCC implement the C++ standard allocator?

我不熟悉追踪源代码来找出 C++ 标准分配器的 GCC STL 实现 (libstdc++),我找不到任何简短的解释、文档和技术报告来描述内存模型GCC 选择。

我猜想 GCC 使用几个固定大小的桶来存储相同大小的小对象(以字节为单位)并为大对象分配大内存 space ad hoc具体尺寸。

GCC 为 C++ 标准分配器选择的具体内存模型是什么?

std::allocator 只使用 operator newoperator delete,而那些又简单地包装 mallocfree

因此,实现被委托给 C 库,以恰好在使用的为准。

I cannot find any brief explanation, documentation and technical reports that describe what the memory model that GCC selects

阅读代码。它是开源的,并且以纯文本形式包含在编译器中。

如果您不确定您的标准headers在哪里,您可以做以下两件事之一:

  1. 了解如何询问编译器as in this question

  2. 欺骗编译器告诉你,例如。通过尝试做某事 std::allocator 不能

    #include <memory>
    
    int main() {
        std::allocator<int> a;
        a.allocate(&a);
        return 0;
    }
    

    给予

    error ... 
    In file included from \
      /usr/include/x86_64-linux-gnu/c++/6/bits/c++allocator.h:33:0,
    

当您发现 std::allocator 只是使用堆来做出所有这些决定时,您可以查看 glibc sourcemalloc