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,商业)
但我仍然很好奇如何确定我的编译器使用的默认分配器...
阅读这个问题:
我试图为 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,商业)
但我仍然很好奇如何确定我的编译器使用的默认分配器...