通过在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)
重新设计,我们不向后兼容
答案 0 :(得分:9)
尝试在您的系统上打印sizeof(bool)
。常见的答案是4或1,而且价值绝不是普遍的。根据您使用的编译器标志,您可以得到不同的答案。
Vulkan需要在所有系统上以相同的方式工作,无论您使用什么编译器标志来编译程序,它都需要正常工作。如果使用sizeof(bool) == 1
编译Vulkan但使用sizeof(bool) == 4
进行编译,则界面将不正确。我亲眼目睹了这个特殊的错误发生。