मैं इस सी कोड में आए और मैं इसे समझने के लिए कोशिश कर रहा हूँ: इतना मैं समझता हूँसंरचनाओं को संरेखित करने से सी में कैसे मदद मिलती है?
typedef long Mtx_t[4][4];
typedef union {
Mtx_t m;
long long int force_structure_alignment;
} Mtx;
पहले typedef एक 4x4 मैट्रिक्स के रूप में Mtx_t परिभाषित करता है,। लेकिन एमटीएक्स के लिए दूसरा टाइपपीफ सिर्फ पिछले प्रकार की मांग करता है और फोर्स_स्ट्रक्चर_लिग्मेंट नामक एक लंबी लंबी int जोड़ता है।
इसका उद्देश्य क्या है? क्यों न सिर्फ एमटीएक्स को 4x4 मैट्रिक्स के रूप में परिभाषित करें और इसके साथ किया जाए?
एक उत्सुक उदाहरण; चूंकि यह एक संघ है, आकार यह सबसे बड़ा प्रकार है; जो मेरे सिस्टम पर 'लंबे [4] [4] 'के लिए 128 बाइट्स होगा। जहां अन्य क्षेत्र मेरे सिस्टम पर केवल '8' बाइट्स है। यह किसी भी संरेखण में योगदान नहीं देता है। आप कल्पना करेंगे कि संरेखण के लिए उपयोग किए जाने के मामले में 'force_structure_alignment' अन्य प्रकारों से बड़ा होगा। – jacob
वे इसे वैध 'लंबी लंबी' सीमा पर गठबंधन करने के लिए मजबूर कर रहे हैं। उदाहरण के लिए, यह 8 बाइट्स हो सकता है जबकि 'लंबा' 4 बाइट हो सकता है। यह स्पष्ट नहीं है कि यह वांछित क्यों है। यह स्मृति संदर्भ प्रदर्शन में सुधार करने का प्रयास हो सकता है। यह भी संभव है कि वे बड़ी स्मृति एक्सेस करने के लिए 'लंबे समय तक' के साथ 'Mtx_t' चर को उपनाम करने का प्रयास कर सकें। –
@jacob: 'long [4] [4] 'में केवल' लंबी 'की संरेखण आवश्यकताएं हैं, इसलिए' लंबे समय तक संरेखण शायद कठोर है। – user2357112