C++ new 的不同实现

Different implementations of C++ new

阅读这个问题:,似乎有很多不同的 malloc 实现。

我试图为 C++ new 运算符找到类似的东西,但找不到任何关于 how/where new 实现以及是否存在不同实现的信息。他们呢?例如,glibc 使用什么?

根据我的经验,唯一知道的方法就是强制执行它:

void* operator new (std::size_t size) throw (std::bad_alloc)
{
    void *ptr = malloc(size);
    if (!ptr) throw std::bad_alloc();
}

void operator delete(void *ptr)
{
    free(ptr);
}

对其他 3 个版本执行相同的操作。

肯定有人会说您不能替换标准库版本。如果您动态链接到标准库,他们是对的,所以不要那样做。如果您是静态链接,这有效。

这是我找到的几个分配器:

HOARD(GNU + 商业许可证)

用于 SMP 的 MicroQuill SmartHeap(商业许可证)

Google 性能工具 TCMalloc(BSD 许可证)

NedMalloc(BSD 许可证)

JemAlloc(BSD 许可证)

PTMalloc(GNU,还没有 Windows 端口?)

英特尔线程构建块(GNU,商业)

但我仍然很好奇如何确定我的编译器使用的默认分配器...