2011-08-13 6 views
8

मुझे यह समझने में परेशानी हो रही है कि alignas और alignof कीवर्ड का उद्देश्य क्या है, और मुझे पूरा यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि संरेखण क्या है।के लिए उपयोग किए गए alignas और alignof कीवर्ड क्या हैं?

जैसा कि मैं इसे समझता हूं, एक स्मृति पता एन बाइट्स के साथ गठबंधन किया जाता है यदि यह एन द्वारा विभाजित है, यानी, यह एक समय में 'एन' बाइट्स (0 से 0 या कुछ डिफ़ॉल्ट मान 'की गणना करके प्राप्त किया जा सकता है?)। इसके अलावा, alignas कीवर्ड, जब एक परिवर्तनीय घोषणा उपसर्ग करते हैं, यह निर्दिष्ट करता है कि जिस चर पर चर संग्रहित किया गया है उसे गठबंधन किया जाना है, और alignof देता है कि एक चर का पता कैसे गठबंधन किया जाता है।

हालांकि, मुझे विश्वास नहीं है कि यह संरेखण की सही समझ है या alignof/alignas कीवर्ड - कृपया मुझे गलत किसी भी बिंदु पर सही करें। मैं यह भी नहीं देखता कि इन खोजशब्दों का क्या उपयोग होता है, इसलिए यदि कोई यह बता सकता है कि उनका उद्देश्य क्या है, तो मैं इसकी सराहना करता हूं।

उत्तर

8

कुछ विशेष प्रकारों को सामान्य से अधिक बाइट्स पर गठबंधन किया जाना चाहिए- उदाहरण के लिए, जीपीयू को सबसे कुशल प्रतिलिपि बनाने के लिए मैट्रिस को 1686 पर 16bytes पर गठबंधन किया जाना चाहिए। एसएसई वेक्टर प्रकार भी इस तरह से व्यवहार कर सकते हैं। इस प्रकार, यदि आप एक कंटेनर प्रकार बनाना चाहते हैं, तो आपको उस प्रकार की संरेखण आवश्यकताओं को जानना चाहिए जिसे आप शामिल करने या आवंटित करने का प्रयास कर रहे हैं।

+0

फिर कीवर्ड केवल कुछ परिस्थितियों में दक्षता के लिए उपयोग किए जाते हैं? –

+0

@ केंड 64: कई प्लेटफ़ॉर्म और स्थितियों पर, गलत संरेखण एक त्रुटि है। x86 अधिक क्षमाशील है। सामान्य मामले में, आपको यूडीटी के आवश्यक संरेखण का सम्मान करना चाहिए। – Puppy

+0

ठीक है, धन्यवाद। –