加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么Vulkan的VkBool32实现为unsigned int?

发布时间:2020-12-16 04:58:24 所属栏目:百科 来源:网络整理
导读:通过在 GitHub上主持的Sascha Willem的C Vulkan演示,我注意到一些函数返回了数据类型VkBool32. 我很好奇为什么当我注意到Line时,Khronos没有使用普通的bool typedef uint32_t VkBool32; 在vulkan.h. uint32_t定义为 typedef unsigned int uint32_t; 在stdint
通过在 GitHub上主持的Sascha Willem的C Vulkan演示,我注意到一些函数返回了数据类型VkBool32.

我很好奇为什么当我注意到Line时,Khronos没有使用普通的bool

typedef uint32_t VkBool32;

在vulkan.h. uint32_t定义为

typedef unsigned int uint32_t;

在stdint.h中.

我的问题是,如果一个标准的Bool只用一个字节来完成这个工作,为什么它会让Sense丢掉3个字节?我的小Recherche表明接下来没有性能差异(见Which is faster : if (bool) or if(int)?),而Khronos他们自己说他们想要最小化兼容性问题(在这种情况下旧C没有原始的布尔类型)以便专注于现代代码.

(见Trevett的报价摘自here)

a ground-up redesign,we’re not backwards compatible

解决方法

尝试在系统上打印sizeof(bool).常见的答案是4或1,而且价值绝不是普遍的.根据您使用的编译器标志,您可以获得不同的答案.

Vulkan需要在所有系统上以相同的方式工作,无论您使用什么编译器标志来编译程序,它都需要正常工作.如果使用sizeof(bool)== 1编译Vulkan但是使用sizeof(bool)== 4编译,则接口将不正确.我亲眼目睹了这一特殊错误的发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读