2016-02-23 1 views
5

vulkan.h मैं यह देखने में देख रहे हैं:क्यों vulkan.h में गैर प्रेषणीय वस्तुओं को हमेशा 64 बिट पर टाइप किया जाता है?

#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 

करता है किसी को भी एक विचार है क्यों 64bits? मेरे लिए यह अधिक उचित प्रतीत होता है हमेशा ifdef

+1

"हमेशा"? - दिखाए गए कोड के अनुसार, वे नहीं हैं। लेकिन गैर-64 बिट प्लेटफार्म पर पॉइंटर का आकार क्या होगा? और पहले मामलों के लिए इस्तेमाल किए गए प्लेटफ़ॉर्म पर इसका आकार क्या है? – Olaf

+2

मेरा प्रश्न इस धारणा पर आधारित था कि 64 बिट प्लेटफार्म में 64 बिट पॉइंटर्स – hiddenbit

उत्तर

5

का पहला मामला उपयोग करने के लिए spec it explicitly says में है कि गैर dispatchable हैंडल 64 बिट्स होना चाहिए:

गैर dispatchable प्रकार संभाल एक 64-बिट पूर्णांक हैं टाइप करें जिसका अर्थ कार्यान्वयन-निर्भर है, और ऑब्जेक्ट जानकारी सीधे सॉफ़्टवेयर संरचना को इंगित करने के बजाय हैंडल में एन्कोड कर सकता है। गैर-प्रेषणीय प्रकार के ऑब्जेक्ट्स में एक प्रकार या पूरे प्रकार के भीतर अद्वितीय हैंडल मान नहीं हो सकते हैं। यदि मानों को संभालना अद्वितीय नहीं है, तो ऐसे किसी हैंडल को नष्ट करने से अन्य प्रकारों के समान हैंडल को अमान्य होने का कारण नहीं बनना चाहिए, और के समान हैंडल का कारण अमान्य होने के कारण नहीं होना चाहिए यदि उस हैंडल मान को और अधिक बनाया गया है बार इसे नष्ट कर दिया गया है।

+0

संदर्भ के लिए धन्यवाद! यह सोचा था की तुलना में यह सरल और अधिक स्पष्ट था। – hiddenbit

+2

यदि ऐसा है, तो हैंडल 64-बिट आर्किटेक्चर पर पॉइंटर्स के रूप में परिभाषित क्यों हैं, बजाय uint64_t? उस पैराग्राफ को पढ़ने के बाद, मुझे हमेशा #ifdef के दूसरे भाग का उपयोग करने के लिए और अधिक उचित लगता है। –

+0

@AndrewWilliamson शायद क्योंकि सी और सी ++ में मजबूत टाइपपीफ नहीं हैं इसलिए वे टाइप-सुरक्षा में मदद करने के लिए सूचक का उपयोग करते हैं। –

संबंधित मुद्दे