Vulkan® Memory Allocator (VMA)技术剖析计划

目前正在使用Vulkan搭建引擎,目前处于起步阶段,打算写得差不多了开源出来。当设计VkBuffer、VkImage和VkMemory时当时考虑到自己写一个内存管理分配器,手里也没有什么好的参考材料,查阅Vulkan资料时偶然之间查阅到AMD公司有一个开源的Vulkan内存管理项目:Vulkan® Memory Allocator (VMA)就打算研究研究并将其加入到引擎中,顺便将研究结果分享一下,目前还在同步研究中。


目前VMA并没有包括Vulkan中所有的内存相关操作,比如Transfer,导入导出外部内存等。VMA实现了最常见的内存相关管理。

VMA的在线文档可能要梯子(我是没打开),你可以从VMA的Github中获取文档。

VMA文档说最新版本的VMA支持Vulkan1.0和Vulkan 1.1,我看了一下源码Vulkan1.2也行(内部用的Vulkan1.1,Vulkan1.2内存标准没啥变化)


相关资料:

AMD Vulkan 官网

Vulkan Memory Allocator(VMA)

侯捷 C++内存管理 从平地到万丈高楼

 

AMD 还写了DX12的内存管理项目(真贴心)

D3D12 Memory Allocator (D3D12MA)


由于内存管理算是一个复杂的问题,如果感觉自己对于内存分配之类的掌握比较薄弱的话推荐先看一遍侯捷 C++内存管理 从平地到万丈高楼。有关很多内存管理共性,比如union、定点内存分配之类的话题讲的很清楚(不得不说侯捷老师真是太牛逼了)。


目前画了个结构图,仅供参考。

Vulkan® Memory Allocator (VMA)技术剖析计划

  • VkDeviceMemory在VmaDeviceMemoryBlock中