繁体   English   中英

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

[英]Why is Vulkan's VkBool32 implemented as an unsigned int?

通过在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显示没有性能差异(请参阅哪个更快:if(bool)或if(int)? ),而Khronos他们自己说他们想要最小化兼容性问题(在这种情况下,旧C没有原始布尔类型)以便专注于现代代码。

(见Trevett的报价取自这里

一个彻底的重新设计,我们不向后兼容

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM