GCC 是如何实现 C++ 标准分配器的?
How does GCC implement the C++ standard allocator?
我不熟悉追踪源代码来找出 C++ 标准分配器的 GCC STL 实现 (libstdc++),我找不到任何简短的解释、文档和技术报告来描述内存模型GCC 选择。
我猜想 GCC 使用几个固定大小的桶来存储相同大小的小对象(以字节为单位)并为大对象分配大内存 space ad hoc具体尺寸。
GCC 为 C++ 标准分配器选择的具体内存模型是什么?
std::allocator
只使用 operator new
和 operator delete
,而那些又简单地包装 malloc
和 free
。
因此,实现被委托给 C 库,以恰好在使用的为准。
I cannot find any brief explanation, documentation and technical reports that describe what the memory model that GCC selects
阅读代码。它是开源的,并且以纯文本形式包含在编译器中。
如果您不确定您的标准headers在哪里,您可以做以下两件事之一:
了解如何询问编译器as in this question
欺骗编译器告诉你,例如。通过尝试做某事 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 source 的 malloc
。
我不熟悉追踪源代码来找出 C++ 标准分配器的 GCC STL 实现 (libstdc++),我找不到任何简短的解释、文档和技术报告来描述内存模型GCC 选择。
我猜想 GCC 使用几个固定大小的桶来存储相同大小的小对象(以字节为单位)并为大对象分配大内存 space ad hoc具体尺寸。
GCC 为 C++ 标准分配器选择的具体内存模型是什么?
std::allocator
只使用 operator new
和 operator delete
,而那些又简单地包装 malloc
和 free
。
因此,实现被委托给 C 库,以恰好在使用的为准。
I cannot find any brief explanation, documentation and technical reports that describe what the memory model that GCC selects
阅读代码。它是开源的,并且以纯文本形式包含在编译器中。
如果您不确定您的标准headers在哪里,您可以做以下两件事之一:
了解如何询问编译器as in this question
欺骗编译器告诉你,例如。通过尝试做某事
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 source 的 malloc
。