对TBB的工作原理没有特别深入的了解。windows默认的堆内存(后面统一内存)申请默认是单线程的,默认单线程是因为刚开始设计这个操作系统的时候就没有考虑到后面会使用多个线程,而且单线程更简单。我看其他人对这个库的测评是在单线程上性能提升不大,多线程提升比较大(可能是谣言)。
class SYSTEM_API MemoryWin64 :public MemoryBase { public: virtual void* Allocate(USIZE_TYPE uiSize, USIZE_TYPE uiAlignment, bool bIsArray); virtual void Deallocate(char* pcAddr, USIZE_TYPE uiAlignment, bool bIsArray); };
#if !_DEBUG
#if defined(_DEBUG)
#undef _DEBUG
#endif
#include <scalable_allocator.h>
void* MemoryWin64::Allocate(USIZE_TYPE uiSize, USIZE_TYPE uiAlignment, bool bIsArray)
{
if (uiAlignment != 0)
{
uiAlignment = Max(uiSize >= 16 ? (USIZE_TYPE)16 : (USIZE_TYPE)8, uiAlignment);
return scalable_aligned_malloc(uiSize, uiAlignment);
}
else
{
return scalable_malloc(uiSize);
}
}
void MemoryWin64::Deallocate(char* pcAddr, USIZE_TYPE uiAlignment, bool bIsArray)
{
if (!pcAddr)
{
return;
}
if (uiAlignment != 0)
{
scalable_aligned_free(pcAddr);
}
else
{
scalable_free(pcAddr);
}
}
这一块的源码,我在Ue5引擎的源码里也看到了,这是和ue5同款内存申请库。
标签:uiAlignment,windows,pcAddr,内存,USIZE,TBB,TYPE,uiSize From: https://www.cnblogs.com/zjr0/p/16981274.html