目录

VulkanMemory API Not Paired

使用vkAllocateMemory()分配的Vulkan内存,使用完毕后,需及时调用vkFreeMemory()进行释放,避免GPU内存无法回收,造成内存泄漏。

规则配置

// rules.json

{
  "rules": {
     "cpp": {
       "ResourceLeak": [
         {
           "ruleId": "VulkanMemory API Not Paired",
           "severity": "error",
           "skip": false
         }
       ]
     }
   }
}

正例

// 正例代码

#include <vulkan/vulkan.h>
void AllocateVulkanMemoryWithFree(VkDevice device) 
{
    VkMemoryAllocateInfo allocInfo = {};
    allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
    allocInfo.allocationSize = 1024;
    
    VkDeviceMemory memory;
    
    vkAllocateMemory(device, &allocInfo, nullptr, &memory);
    
    // 使用 memory...
    
    // 正确释放 Vulkan 内存
    vkFreeMemory(device, memory, nullptr);
}

反例

// 反例代码

#include <vulkan/vulkan.h>
void AllocateVulkanMemoryWithoutFree(VkDevice device) 
{
    VkMemoryAllocateInfo allocInfo = {};
    allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
    allocInfo.allocationSize = 1024;
    
    VkDeviceMemory memory;
    
    // 分配内存但
    vkAllocateMemory(device, &allocInfo, nullptr, &memory);
    
    // 使用 memory...
    // 未释放 - GPU 内存泄漏!
}

Code Scanner代码检查规则的配置指导请参考1.6.3 代码检查工具(codescanner)