gpt4 book ai didi

c++ - TBB tbb::memory_pool> 如何正确使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:23 31 4
gpt4 key购买 nike

我有疑问。

对于 tbb::memory_pool< tbb::scalable_allocator > shared_memory_pool_;

如果在主线程中实例化。而且,我在工作线程中调用了 shared_memory_pool_.malloc(sizeof(my_class)) 。 tbb 会从主堆分配该大小的内存,还是会从线程“域”分配它,以便仍然可以避免由普通 malloc() 引起的锁争用?

最佳答案

tbb::memory_pool 基于与 tbb::scalable_allocator 相同的内部结构。因此,一旦内存池最初获取内存(在您指定的情况下,也来自 tbb::scalable_allocator),它将使用相同的机制在线程之间分配和重用它。 IE。它是可扩展的,并尽可能避免全局锁定。不过,由于内存仍然是一种公共(public)资源,一些线程同步无论如何是不可避免的。具体来说,我预计初始内存请求会有更多争用,因为每线程缓存还没有预热;并且 scalable_allocator 试图在可伸缩性和内存消耗之间保持平衡,因此它不会疯狂​​地使用每线程缓存在线程之间重新分配内存,这也是一种线程同步(尽管比锁更具可伸缩性)。

至于由 scalable_allocator 进行的 [非常] 初始内存分配,它通过 mmapVirtualAlloc 获得足够大的内存块,而不是通过 malloc。

关于c++ - TBB tbb::memory_pool<tbb::scalable_allocator<char>> 如何正确使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15490418/

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