【发布时间】:2016-05-30 23:46:14
【问题描述】:
查看GitHub 上托管的 Sascha Willem 的 C++ Vulkan 演示,我注意到一些函数返回了数据类型 VkBool32。
我很好奇为什么当我注意到 Line 时 Khronos 没有使用普通的布尔值
typedef uint32_t VkBool32;
在 vulkan.h 中。 uint32_t 定义为
typedef unsigned int uint32_t;
在 stdint.h 中。
我的问题是,如果标准 Bool 只用一个字节完成工作,为什么丢弃 3 个字节有意义?我的小 Recherche 表明几乎没有性能差异(请参阅Which is faster : if (bool) or if(int)?),而 Khronos 自己说他们希望最大限度地减少兼容性问题(在这种情况下,旧 C 没有原始布尔类型)以专注于现代代码.
(请参阅 Trevett 引用自 here 的引文)
彻底的重新设计,我们不向后兼容
【问题讨论】:
-
您似乎已经回答了自己的问题
-
“Khronos 自己说他们想尽量减少兼容性问题(在这种情况下,旧 C 没有原始布尔类型)”
-
“一个标准的布尔值只需要一个字节就可以完成这项工作”——没有根据的假设。你会发现不止一个编译器有
sizeof(bool)==sizeof(int)。 -
链接的问题是 x86 特定的。还有(幸运的是)其他架构可能会产生不同的结果并具有不同大小的
bool。该标准不需要sizeof(bool) == sizeof(char)。而且根本不可能是内存问题。此外,C 确实具有布尔类型(_Bool和stdbool.h提供bool宏)。 -
@Keith 我指的是标准定义的
bool,而不是实现定义的_Bool,但这就是将问题标记为C/C++ 的结果。无论如何,请参阅 C++ 标准中的脚注 69,从字面上看它可以更大。
标签: c++ c performance vulkan