gpt4 book ai didi

c++ - Boost::互斥锁和 Malloc

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:01 24 4
gpt4 key购买 nike

我正在尝试在 C++ 中使用更快的内存分配器。由于许可/成本,我无法使用 Hoard。我在单线程设置中使用 NEDMalloc 并获得了出色的性能,但我想知道我是否应该切换到其他东西——据我了解,NEDMalloc 只是基于 C 的 malloc() 和 free() 的替代品, 不是基于 C++ 的新建和删除运算符(我广泛使用)。

问题是我现在需要线程安全,所以我试图 malloc 一个对象,该对象是引用计数的(以防止过度复制),但它也包含一个互斥指针。这样,如果您要删除最后一个拷贝,则首先需要锁定指针,然后释放对象,最后解锁并释放互斥量。

但是,使用 malloc 创建 boost::mutex 似乎是不可能的,因为我无法初始化私有(private)对象,因为直接调用构造函数是被禁止的。

所以我遇到了这种奇怪的情况,我使用 new 分配锁,使用 nedmalloc 分配其他所有内容。但是当我分配大量内存时,我会遇到分配错误(当我切换到 malloc 而不是 nedmalloc 时会消失~但是性能很糟糕)。我的猜测是,这是由于内存中的碎片以及 nedmalloc 和 new 无法并排放置 nice。

必须有更好的解决方案。你有什么建议?

最佳答案

谷歌的 malloc replacement速度相当快,默认情况下是线程安全的,并且易于使用。只需将它链接到您的应用程序,它就会替换行为或 malloc/freenew/delete。这使得重新分析您的应用程序以验证新分配器是否确实加快了速度变得特别容易。

关于c++ - Boost::互斥锁和 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com