为什么不可分配的句柄并不总是uint64_t
类型?为什么在64位平台上必须将其表示为ptr
?
#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
规范说明:
不可调度的句柄类型是一个64位整数类型,其含义与实现相关,并且可能直接在句柄中编码对象信息,而不是作为对底层对象的引用。非可调度类型的对象在类型内或跨类型中可能没有唯一的句柄值。如果句柄值不唯一,则销毁其中一个句柄不得使其他类型的相同句柄无效,并且如果已经创建的该句柄值比它被销毁的次数多,则不得导致相同类型的相同句柄无效。