为什么 Vulkan 的 VkBool32 实现为 unsigned int?
Why is Vulkan's VkBool32 implemented as an unsigned int?
查看 GitHub 上托管的 Sascha Willem 的 C++ Vulkan 演示,我注意到一些函数返回数据类型 VkBool32
。
当我注意到这条线时,我很好奇为什么 Khronos 没有使用普通的 bool
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)
a ground-up redesign, we’re not backwards compatible
尝试在您的系统上打印 sizeof(bool)
。常见的答案是 4 或 1,这个值绝不是普遍的。根据您使用的编译器标志,您可以获得不同的答案。
Vulkan 需要在所有系统上以相同的方式工作,并且无论您使用什么编译器标志来编译程序,它都需要正确工作。如果 Vulkan 是使用 sizeof(bool) == 1
编译的,但您使用 sizeof(bool) == 4
编译,则接口将不正确。我亲眼目睹了这个特殊错误的发生。
查看 GitHub 上托管的 Sascha Willem 的 C++ Vulkan 演示,我注意到一些函数返回数据类型 VkBool32
。
当我注意到这条线时,我很好奇为什么 Khronos 没有使用普通的 bool
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)
a ground-up redesign, we’re not backwards compatible
尝试在您的系统上打印 sizeof(bool)
。常见的答案是 4 或 1,这个值绝不是普遍的。根据您使用的编译器标志,您可以获得不同的答案。
Vulkan 需要在所有系统上以相同的方式工作,并且无论您使用什么编译器标志来编译程序,它都需要正确工作。如果 Vulkan 是使用 sizeof(bool) == 1
编译的,但您使用 sizeof(bool) == 4
编译,则接口将不正确。我亲眼目睹了这个特殊错误的发生。