gpt4 book ai didi

c++ - 多线程可以加速内存分配吗?

转载 作者:IT老高 更新时间:2023-10-28 22:33:03 29 4
gpt4 key购买 nike

我正在使用 8 核处理器,并且正在使用 Boost 线程来运行大型程序。从逻辑上讲,程序可以分成组,每个组由一个线程运行。在每个组中,一些类调用“new”操作符总共 10000 次。Rational Quantify 表明,"new"内存分配在程序运行时占用了最大的处理时间,并减慢了整个程序的速度。

我可以加快系统速度的一种方法是在每个“组”中使用线程,这样 10000 个内存分配可以并行发生。

我不清楚这里将如何管理内存分配。操作系统调度器真的能够并行分配内存吗?

最佳答案

标准 CRT

虽然在旧版 Visual Studio 中默认 CRT 分配器是阻塞的,但至少对于直接调用相应 OS 函数的 Visual Studio 2010 和更新版本而言,情况不再如此。 Windows 堆管理器在 Widows XP 之前一直处于阻塞状态,在 XP 中可选的 Low Fragmentation Heap is not blocking , 而默认的是,较新的操作系统 (Vista/Win7) 默认使用 LFH。最近(Windows 7)分配器的性能非常好,可与下面列出的可扩展替代品相媲美(如果针对旧平台或当您需要它们提供的一些其他功能时,您仍然可能更喜欢它们)。存在多个“可扩展分配器”,具有不同的许可证和不同的缺点。我认为在 Linux 上,默认运行时库已经使用了可扩展的分配器(PTMalloc 的一些变体)。

可扩展替换

我知道:

您可能想查看 Scalable memory allocator experiences我在 Windows 项目中尝试使用其中一些的经验。

实际上,它们中的大多数都是通过为每个线程缓存和每个线程预分配区域进行分配来工作的,这意味着小分配通常只发生在线程上下文中,操作系统服务很少被调用。

关于c++ - 多线程可以加速内存分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859263/

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