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

时间:2016-02-18 16:58:31

标签: c++ c performance vulkan

通过在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

  

重新设计,我们不向后兼容

1 个答案:

答案 0 :(得分:9)

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

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