为什么在vulkan.h中,不可调度的对象总是被定义为64位?

hid*_*bit 5 c vulkan

看着vulkan.hi看到这个:

#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || .....
    #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
#else
    #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
#endif
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么64位?对我来说,总是使用ifdef的第一个案例似乎更合理

rat*_*eak 5

规范中,它明确指出不可分派的句柄必须是64位:

不可分派的句柄类型是64位整数类型,其含义与实现有关,并且可以直接在句柄中编码对象信息,而不是指向软件结构.不可分派类型的对象在类型内或跨类型可能没有唯一的句柄值.如果句柄值不是唯一的,那么销毁一个这样的句柄不能导致其他类型的相同句柄变得无效,并且如果该句柄值的创建次数比已经多次,则不能导致相同类型的相同句柄变为无效.销毁.

  • 如果是这种情况,那么为什么句柄被定义为64位架构上的指针,而不是uint64_t?阅读完该段后,我觉得总是使用#ifdef的第二部分更合理. (2认同)