इनमें से एक में डेटा संरेखित करने के लिए कैसे पर विस्तार देने डेटा वस्तुओं के संरेखण है - पते दिए गए हैं कि के संबंध में स्मृति में उनके स्थान चार, आठ या 16 बाइट्स के गुणक। 16-बिट इंटेल आर्किटेक्चर के तहत, डेटा संरेखण पर प्रदर्शन पर बहुत कम प्रभाव पड़ा, और इसका उपयोग पूरी तरह से वैकल्पिक था। आईए -32 के तहत, सही ढंग से डेटा संरेखित करना एक महत्वपूर्ण अनुकूलन हो सकता है, हालांकि इसका उपयोग अभी भी बहुत कम अपवादों के साथ वैकल्पिक है, जहां सही संरेखण अनिवार्य है। हालांकि 64-बिट वातावरण डेटा वस्तुओं पर अधिक कठोर आवश्यकताओं को लागू करता है। Misaligned वस्तुओं प्रोग्राम अपवाद का कारण बनता है। किसी आइटम को ठीक तरह से गठबंधन करने के लिए, इसे 64-बिट इंटेल आर्किटेक्चर (जल्द ही चर्चा की गई) द्वारा लगाए गए आवश्यकताओं को पूरा करना होगा, साथ ही लिंकर के उन एप्लिकेशन को बनाने के लिए उपयोग किया जाना चाहिए।
डेटा संरेखण का मूल नियम यह है कि सबसे सुरक्षित (और सबसे व्यापक रूप से समर्थित) दृष्टिकोण इंटेल शब्द "प्राकृतिक सीमाओं" पर निर्भर करता है। वे वे होते हैं जो तब होते हैं जब आप डेटा आइटम के आकार को दो, चार, आठ या 16 बाइट्स के अगले सबसे बड़े आकार में ले जाते हैं। उदाहरण के लिए, एक 10-बाइट फ्लोट 16-बाइट पते पर गठबंधन किया जाना चाहिए, जबकि 64-बिट पूर्णांक को आठ-बाइट पते पर गठबंधन किया जाना चाहिए। चूंकि यह एक 64-बिट आर्किटेक्चर है, इसलिए पॉइंटर आकार सभी आठ बाइट चौड़े हैं, और इसलिए उन्हें आठ-बाइट सीमाओं पर संरेखित करना चाहिए।
यह अनुशंसा की जाती है कि 16 बाइट से अधिक की सभी संरचनाएं 16-बाइट सीमाओं पर संरेखित हों। सामान्य तौर पर, सर्वश्रेष्ठ प्रदर्शन के लिए, डेटा संरेखित इस प्रकार है:
- संरेखित किसी भी पते
एक गठबंधन चार-बाइट शब्द के भीतर समाहित किया जाना
- संरेखित 16-बिट डेटा
- संरेखित 32 पर 8 बिट डेटा -बिट डेटा ताकि इसके आधार का पता चार
- संरेखित 64-बिट डेटा की एक बहु है ताकि उसके आधार पता आठ
- संरेखित 80-बिट डेटा की एक बहु है ताकि उसके आधार पते सोलह
का गुणज है
- 128-बिट डेटा संरेखित करें ताकि वह इसके आधार पते सोलह की एक बहु
एक तो यह है कि इसके आधार का पता 64 आकार घटते क्रम में डेटा सॉर्ट की एक बहु है 64-बाइट या अधिक से अधिक डेटा संरचना या सरणी गठबंधन किया जाना चाहिए के साथ सहायता के लिए एक अनुमानी है प्राकृतिक संरेखण। जब तक 16-बाइट सीमाएं (और कैश लाइनें) कभी पार नहीं होती हैं, प्राकृतिक संरेखण सख्ती से जरूरी नहीं है, हालांकि यह सामान्य संरेखण अनुशंसाओं का अनुपालन करने का एक आसान तरीका है।
संरचनाओं के भीतर डेटा को सही ढंग से संरेखित करने से डेटा ब्लोट (पैडिंग को सही ढंग से रखने के लिए आवश्यक पैडिंग के कारण) हो सकता है, इसलिए जहां आवश्यक हो और संभव हो, संरचनाओं को पुनर्गठित करने के लिए उपयोगी है ताकि व्यापक संरेखण की आवश्यकता वाले फ़ील्ड संरचना में पहले हों । इस समस्या को हल करने के लिए लेख "आईए -64 आर्किटेक्चर (कोड क्लीन) के लिए कोड तैयार करना" लेख में दिखाई देता है।
हाय थिएट्रस, यहां मेरा संदेह है! यह क्यों है कि निचले 2 पता रेखाएं समाप्त हो गई हैं? इस सेटअप के साथ Coz मैं केवल पते 0, 4, 8 से डेटा तक पहुंच सकते हैं .. इतने पर। तो ऐसी स्थिति में बाइट मैनिपुलेशन की देखभाल कैसे की जाती है? आपने बताया कि एक डेटा बाइट के लिए कोई संरेखण प्रतिबंध नहीं है, यह कैसे प्राप्त किया जाता है जब नीचे 2 पता पंक्तियों पर ध्यान नहीं दिया जाता है? आपके उत्तर के लिए धन्यवाद! –
अधिकतर मैं इस बात से चिंतित हूं कि मेरे कोड में बाइट मैनिपुलेशन होने पर पता लाइनों पर ध्यान क्यों नहीं दिया जाता है (और ऐसा करने के लिए लगभग सभी तरह से जाना ..)? लिंक के लिए –