Vulkan 的 VkAllocationCallbacks 使用 malloc/free() 实现

2023-11-25

我正在阅读Vulkan 内存分配 - 内存主机似乎 VkAllocationCallbacks 可以使用简单的 malloc/realloc/free 函数来实现。

typedef struct VkAllocationCallbacks {
   void*                                   pUserData;
   PFN_vkAllocationFunction                pfnAllocation;
   PFN_vkReallocationFunction              pfnReallocation;
   PFN_vkFreeFunction                      pfnFree;
   PFN_vkInternalAllocationNotification    pfnInternalAllocation;
   PFN_vkInternalFreeNotification          pfnInternalFree;
} VkAllocationCallbacks;

但我认为实现我自己的 vkAllocationCallback 只有两个可能的原因:

  • 通过 Vulkan API 记录和跟踪内存使用情况;
  • 实现一种堆内存管理,它是一大块需要反复使用和重用的内存。显然,这可能是一种矫枉过正的行为,并且会遇到同样类型的托管内存问题(如在 Java JVM 中)。

我在这里错过了什么吗? 什么样的应用程序值得实现 vkAllocationCallbacks ?


来自spec:

由于大多数内存分配都偏离关键路径,因此这不是 意味着一种性能特征。相反,这对于某些特定的情况可能有用 嵌入式系统,用于调试目的(例如放置一个保护页 在所有主机分配之后),或用于内存分配日志记录。

对于嵌入式系统,您可能一开始就抓住了所有内存,因此您不希望驱动程序调用 malloc,因为容器中可能已经没有任何内存了。保护页和内存日志记录(仅适用于调试版本)对于谨慎/好奇的人可能很有用。

我在某处的幻灯片上读到(抱歉不记得在哪里),您绝对不应该实现仅馈送到 malloc/realloc/free 的分配回调,因为您通常可以假设驱动程序做得比这更好(例如,将小额分配合并到池中)。

我认为,如果您不确定是否应该实现分配回调,那么您不需要实现分配回调,也不需要担心也许您应该实现。

我认为它们适用于那些特定的用例和那些really想要掌控一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vulkan 的 VkAllocationCallbacks 使用 malloc/free() 实现 的相关文章

  • Objective-C 使用字符串池吗?

    我知道Java https stackoverflow com questions 3801343 what is string pool in java and C http msdn microsoft com en us librar
  • C++中const对象位于哪个内存区域? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • Vulkan 交换链格式 UNORM 与 SRGB?

    在 Vulkan 程序中 片段着色器通常向每个红 蓝 绿通道输出 0 0 到 1 0 范围内的单精度浮点颜色 然后将这些颜色写入 混合到 交换链图像中 然后呈现在屏幕上 根据交换链图像的格式 创建交换链时指定 浮点值被编码为位 当我更改交换
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • 如何计算选择查询的最佳获取大小

    在 JDBC 中 默认获取大小为 10 但我想当我有一百万行时 这不是最佳获取大小 据我所知 获取大小太低会降低性能 但如果获取大小太高也会降低性能 我怎样才能找到最佳尺寸 这对数据库端有影响吗 它会占用大量内存吗 如果您的行很大 请记住
  • 如何在 C++ 项目的 Cmake 文件上添加 Mac OS 框架

    我正在尝试将外部库 Vulkan 添加到我的项目中 这个库是预编译的并且有一个框架 我的项目树 build source Entry main cpp include ext vulkan macos include lib Framewo
  • 什么时候通过引用传递不是一个好主意?

    这是一个我从未真正理解的内存分配问题 void unleashMonkeyFish MonkeyFish monkey fish new MonkeyFish std string localname Wanda monkey fish g
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged
  • C++ new int[0]——它会分配内存吗?

    一个简单的测试应用程序 cout lt lt new int 0 lt lt endl outputs 0x876c0b8 所以看起来确实有效 标准对此有何规定 分配 空内存块总是合法的吗 从5 3 4 7 当直接新声明符中的表达式的值为零
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 多维数组 (C++)

    我正在尝试将指针存储在数组中 我指向类对象的指针是 classType ClassObject 所以我知道我可以使用 new 运算符来分配它 如下所示 ClassObject new classType 100 我正在阅读一个带有标点符号的
  • iOS设备和iPhone模拟器内存​​组织的差异

    我正在尝试使用 Xcode 4 3 3 和 iPhone 5 1 模拟器开发一个应用程序 当我在模拟器上运行这个应用程序时 我没有收到任何警告 并且它运行得很好 但是 当我尝试在 iOS 设备上执行此操作时 我收到一条警告消息 收到内存警告
  • PHP - 调整 PNG 图像大小时出现内存错误

    我有一个脚本可以根据上传的图像创建缩略图 它对 jpg 工作正常 但给我一个错误 致命错误 允许的内存大小 67108864 字节已耗尽 尝试分配 26250000 字节 当我上传 png 图像时 脚本是 create thumbnail
  • 一个地址有多少字节? [复制]

    这个问题在这里已经有答案了 在64位机器上 我们知道一个地址是8个字节 然而 我并不完全清楚一个地址中有多少字节的信息 虚拟内存中的每个字节都有一个地址吗 或者内存中的每 64 位都有一个地址 还是取决于架构 如果这取决于架构 那么我应该如
  • 什么时候用==,什么时候用is?

    奇怪的是 gt gt gt a 123 gt gt gt b 123 gt gt gt a is b True gt gt gt a 123 gt gt gt b 123 gt gt gt a is b False Seems a is b
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include

随机推荐

  • 在具有大型 C 文件的 vim 中启用语法和语法折叠会导致完成速度变慢

    当我在一个大的 C 文件 大约 8000 行中有语法时 完成ctrl p和ctrl n非常慢 超过20 当我关闭语法时 完成时间不到一秒钟 我找到了重现这种行为的最小方法 使用空的 vim 文件夹并创建仅包含以下行的 vimrc set s
  • 如何让CSV阅读器读取内存文件?

    我正在尝试将整个文件提取到内存中 完成 使用 StringIO 但据我所知 这些对象的行为并不完全像 真实 文件 我得到了整个内容 或者我可以读取一次一行 但我不知道如何应用此模式 import csv with open MYMEMORY
  • 如何使用 simple_form 生成 input[type=date]?

    当我做f input start date as date我得到 3 个选择元素 日 月和年 我可以f input start date as string to get input type text 元素 但我怎样才能生成input t
  • 订阅或绑定现有的Intent服务

    我有一个应用程序 它的初始活动会在列表视图中列出一些文件 单击列表中的某个项目时 您将看到该特定文件的详细活动 在详细视图中 我有一个名为下载的按钮 当您单击下载时 它会启动一个 IntentService 该 IntentService
  • 第一次使用 MongoDB + Docker - 从 docker compose 设置

    我想尝试一下project我在 GitHub 上找到了 所以我在 MacOS 上安装了 MongoDB 现在我试图了解如何通过目录中的 docker compose 文件正确设置它 这是泊坞窗文件 version 3 services re
  • 代码完成不适用于远程文件(使用 RSE)

    What is 在主机上 Windows 7的 面向 PHP 开发人员的 Eclipse版本 Helios 服务版本 2 在访客机器上 Linux Debian 挤压 我想使用 RSE 在 Eclipse 中通过 SSH 编辑我的远程项目
  • 我什么时候应该使用 Perl 的 AUTOLOAD?

    In Perl 最佳实践 AUTOLOAD 部分的第一行是 不要使用自动加载 然而 他描述的所有案例都涉及面向对象或模块 我有一个独立的脚本 其中一些命令行开关控制定义特定函数的哪些版本 现在我知道我可以将条件和评估放在文件顶部 然后再进行
  • 您可以覆盖 scala @serialized 对象中的流编写器吗?

    我现在明白了 scala serialized 对象可以像 Java Serialized 对象一样使用 在 Java Serialized 对象中 您可以重写一些方法来更改对象的流式传输方式 writeObject ObjectOutpu
  • 如何在 JavaScript 中使用 ISO 8601 格式化带有时区偏移的日期?

    Goal 找出local time and UTC time offset然后按以下格式构造 URL 示例网址 Actions Sleep duration 2002 10 10T12 00 00 05 00 该格式基于W3C 推荐 文档说
  • 将 Cassandra BoundStatement 的 ResultSet 映射/转换/转换为使用对象映射 API 构建的 Java 类的最有效方法是什么?

    DataStax Java for Apache Cassandra 中是否有内置方法可以将来自 BoundStatement 的 ResultSet 映射到使用对象映射 API 构建的域对象 Java 类 我是从 Mapper Acces
  • div 清除后 IE 中的额外垂直空间

    我通过左浮动创建了一个简单的 div 网格 并在每行末尾创建了一个空的 div 这在 Firefox 中工作正常 但在 IE 中我在行之间获得了额外的垂直空间 我尝试应用 clearfix 方法 但我一定做错了什么 为什么 IE 会插入多余
  • 跟踪 Python 导入

    我的 Python 库刚刚更改了它的主模块名称foo bar to foobar 为了向后兼容 foo bar仍然存在 但导入它会引发一些警告 现在 似乎一些示例程序仍然从旧模块导入 但不是直接导入 我想找出错误的地方import陈述 有没
  • U后缀的含义

    后缀 或后缀 有什么作用U以下值的平均值 0U 100U 它代表unsigned 声明常量时 还可以指定其类型 另一个常见的例子是L 这代表long 并且您必须将其放置两次才能指定 64 位常量 例子 1ULL 它有助于避免显式强制转换
  • 如何打乱 ArrayList [重复]

    这个问题在这里已经有答案了 我需要一些帮助来编写一个对 ArrayList 进行洗牌的方法 我不知道该在我的方法中放置什么 这是我到目前为止所拥有的 我尝试使用随机方法来随机化列表中的整数 但这不起作用 有人可以告诉我该怎么做吗 这是我尝试
  • 随机数生成最安全的种子是什么?

    为随机数生成器提供种子的最安全的熵源是什么 这个问题与语言和平台无关 适用于网络上的任何机器 理想情况下 我正在寻找云环境中的机器或托管公司提供的服务器可用的资源 有两个重要的弱点需要记住 使用时间发送随机数生成器违反了CWE 337 使用
  • 如何使用 JavaScript 将所有计算的 CSS 样式从一个元素移动到另一个元素?

    我有一个外部样式表 它将某些样式应用于给定元素 我希望能够将这些样式 使用 JavaScript 完全移动到不同的元素 而无需事先了解正在应用的样式 The CSS td padding 5px div HTML td div Apply
  • Grails 域类必须与数据库绑定吗?

    对于 grails 来说 我是一个十足的菜鸟 对于 groovy 来说 我还是一个菜鸟 所以如果这是一个愚蠢的问题 我深表歉意 我正在构建一个简单的 Web 应用程序 我想根据文件系统对象 即目录结构和文件类型 而不是数据库数据来控制应用程
  • 大引号导致 Java Scanner hasNextLine() 为 false —— 为什么?

    我在让 java util Scanner 读取我在记事本中保存的文本文件时遇到问题 即使它与其他文件一起工作得很好 基本上 当它尝试读取问题文件时 它完全空手而归 hasNextLine 为假 缓冲区为空等 我将其范围缩小到这样一个事实
  • 无法在 @INC 中的 /usr/share/perl/5.14/CPAN/FirstTime.pm 中找到 local/lib.pm

    我正在尝试使用 Perl第一次我的系统是 Ubuntu 12 04 我安装了 Perl v 5 14 2 我抬头如何安装 Perl 模块 所以我开始如下 perl MCPAN e shell 向导开始配置环境 如下所示 http paste
  • Vulkan 的 VkAllocationCallbacks 使用 malloc/free() 实现

    我正在阅读Vulkan 内存分配 内存主机似乎 VkAllocationCallbacks 可以使用简单的 malloc realloc free 函数来实现 typedef struct VkAllocationCallbacks voi