为什么不可调度的句柄在64位平台上使用ptr?

Mai*_*ein 2 c vulkan

为什么不可调度的句柄并不总是一个uint64_t?为什么有必要将它们表示为ptr64位平台?

#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
        #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
#endif
Run Code Online (Sandbox Code Playgroud)

规范说

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

rat*_*eak 5

它们没有必要使用指针,只是它们是64位.

在可能的情况下使用指针的原因是因为C和C++没有强类型的定义,因此使用指针会给出一些额外的类型安全性,因为你不能将a赋值VkImageView_T*给a VkImage_T*.