1.UE4源码剖析:MallocBinned(上)
UE4源码剖析:MallocBinned(上)
近期着手UE4项目开发,箱体箱体对UnrealEngine已久仰慕,源码源码终于得此机会深入探索。公式鉴于项目内存性能问题,箱体箱体共享餐厅源码决定从内存分配器着手,源码源码深入研读UE4源码。公式虽个人水平有限,箱体箱体尚不能全面理解,源码源码但愿借此机会揭开源码神秘面纱,公式让新手朋友们不再感到陌生。箱体箱体
UE4内存分配器位于硬件抽象层HAL(Hardware Abstraction Layer)中。源码源码留言站点源码具体装箱内存分配器代码位于VS项目目录:UE4/Source/Runtime/Core/Private/HAL/MallocBinned。公式
分析从ApplePlatformMemory::BaseAllocator开始,箱体箱体可发现Mac平台的源码源码默认分配器为MallocBinned,iOS的公式默认分配器为MallocAnsi。以下将重点分析MallocBinned。replace命令源码
一、确定对齐方式
FScopeLock用于局部线程锁,确保线程同步。关于Alignment的确定,通常使用默认值。xss防御 源码默认值取决于内存对齐方式,此处默认对齐为8字节。
二、确定有足够空间来内存对齐
代码中,SpareBytesCount用于确认空间足够。大奖娱乐源码若分配内存小于8字节,则按Alignment大小匹配箱体;若大于8字节,则按Size + Alignment - sizeof(FFreeMem)匹配箱体。
三、确定箱体大小
根据Size的大小,有三种不同的处理方式。k以下的内存分配采用装箱分配,PoolTable中包含个不同大小的池子。
四、初始化内存池
分析内存池初始化过程,主要工作包括:确定内存大小,分配内存块,设置内存池基本信息。
五、内存装箱
AllocateBlockFromPool从内存池中分配一个Block,实现内存装箱过程。