使用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)