代码之家  ›  专栏  ›  技术社区  ›  Maik Klein

为什么不可分派的句柄在64位排上使用ptr?

  •  2
  • Maik Klein  · 技术社区  · 6 年前

    为什么不可调度的句柄不总是 uint64_t ?为什么它们必须表示为 ptr 在64位平台上?

    #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位整数类型,其含义取决于实现,可以直接在句柄中编码对象信息,而不是充当对底层对象的引用。不可分派类型的对象不能在类型内或跨类型具有唯一的句柄值。如果句柄值不唯一,则销毁一个此类句柄不得导致其他类型的相同句柄无效,并且如果创建的句柄值多于销毁的次数,则不得导致同一类型的相同句柄无效。

    1 回复  |  直到 6 年前
        1
  •  5
  •   ratchet freak    6 年前

    它们不需要使用指针,只需要使用64位指针。

    如果可能的话,指针之所以被使用是因为C和C++没有强的可伸缩性,所以使用指针提供了一点额外的类型安全性,因为您不能分配一个 VkImageView_T* 到A VkImage_T*