Vulkan内存模型+管理

本文介绍了Vulkan的内存模型,包括宿主内存和设备内存的特性,以及内存分配和释放的方法。Vulkan将内存管理交给开发者,强调细粒度控制以优化性能。通过vkAllocateMemory等功能进行设备内存分配,并探讨了Buffer和Image作为资源如何与内存交互。建议在实践中注意内存复用以提高效率。
摘要由CSDN通过智能技术生成

前言

最近在研究Vulkan,在Vulkan中使用内存是个麻烦的过程,而且容易用错,今天就给大家分享下Vulkan的内存模型。

内存,在任何时候都是个稀缺的资源,内存管理更是个让人望而却步的事情。在这个崇尚用户体验的今天,不管是底层系统还是上层应用都在追求极致的性能优化,内存优化也是重中之重。从系统层的分页,池化,脏页回收,连续大内存到上层的优化的数据结构,内存共享,压缩等都在不停地压榨系统内存以获得更高性能的应用程序。

Vulkan内存初心

我认为简单地理解Vulkan区别于OpenGL的最大特点就是Vulkan可以让应用开发者细粒度的控制,在内存方面也是如此。因为Vulkan认为应用自身对于内存占用是最清楚的,内存的创建释放,生命周期都是应用自身的行为导致的。面对复杂的应用场景,很难有通用的优化策略解决所有问题。不管是通过虚拟机还是驱动程序,帮助应用进行内存管理永远是低效的。

基于上述原因,Vulkan将内存管理的工作交给了开发者负责,如何分配释放内存,怎样制定内存策略都由开发者自己决定,这无疑是返璞归真的至理。但话说回来这样的机制对开发者来说却不是友好的,所以我们更需要知道Vulkan的内存模型才能更高效地管理。

Vulkan内存管理

Vulkan中的内存分为两种:宿主内存和设备内存。

这两种内存的特点是宿主内存比设备内存慢。但是宿主内存的容量通常更大。另一方面来说,设备内存是直接对物理设备可见的,因此它更有效率也更为快速。

宿主内存

Vulkan使用宿主内存来存储API的内部数据结构。Vulkan提供了内存分配器机制,允许应用程序控制宿主机端的内存分配。如果应用程序不使用分配器机制,那么Vulkan将使用一个默认的分配器来管理内存和数据结构。

主机内存管理通过以下数据结构来完成:

typedef struct VkAllocationCallbacks {
  Void*                                 pUserData;PFN_vkAllocationFunction              pfnAllocation;PFN_vkReallocationFunction            pfnReallocation;PFN_vkFreeFunction                    pfnFree;PFN_vkInternalAllocationNotification  pfnInternalAlloc;PFN_vkInternalFre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值