Ale*_*rth 3 memory memory-management vulkan
我正在阅读Vulkan内存分配 - 内存主机,似乎可以使用天真的malloc/realloc/free函数实现VkAllocationCallbacks.
typedef struct VkAllocationCallbacks {
void* pUserData;
PFN_vkAllocationFunction pfnAllocation;
PFN_vkReallocationFunction pfnReallocation;
PFN_vkFreeFunction pfnFree;
PFN_vkInternalAllocationNotification pfnInternalAllocation;
PFN_vkInternalFreeNotification pfnInternalFree;
} VkAllocationCallbacks;
Run Code Online (Sandbox Code Playgroud)
但我发现实现自己的vkAllocationCallback只有两个可能的原因:
我在这里错过了什么吗?什么样的应用程序值得实现vkAllocationCallbacks?
根据规范:"由于大多数内存分配都不在关键路径上,因此这不是一个性能特征.相反,这对某些嵌入式系统非常有用,用于调试目的(例如,在所有主机分配后放置一个保护页面),或者用于内存分配日志记录."
使用嵌入式系统,您可能在开始时就已经占用了所有内存,因此您不希望驱动程序调用malloc,因为坦克中可能没有任何内容.保护页面和内存日志记录(仅适用于调试版本)可能对谨慎/好奇很有用.
我在某个地方读过幻灯片(不记得哪里,对不起),你肯定不应该实现只能通过malloc/realloc/free的分配回调,因为你通常可以认为驱动程序的工作要好得多(例如,将小额分配合并到池中).
我认为如果你不确定是否应该实现分配回调,那么你不需要实现分配回调,你也不必担心也许你应该有.
我认为它们适用于那些特定用例以及那些真正希望掌控一切的用户.
| 归档时间: |
|
| 查看次数: |
1839 次 |
| 最近记录: |