2011-11-19 19 views
5

मुझे लगता है कि मैं स्मृति संरेखण समझते हैं, लेकिन क्या मुझे confuses कि कुछ सिस्टम पर एक सूचक का पता, है ना आभासी स्मृति में होने जा रहा है है? इसलिए मैंने देखा है कि संरेखण की अधिकांश जांच/सुनिश्चित करने के लिए केवल सूचक पते का उपयोग करना प्रतीत होता है। क्या यह संभव नहीं है कि भौतिक स्मृति पता गठबंधन नहीं किया जाएगा? एसएसई जैसी चीजों के लिए समस्याग्रस्त नहीं है?वर्चुअल मेमोरी और संरेखण - वे एक साथ कैसे कारक करते हैं?

+1

मैं निम्न स्तर के मेमोरी मॉडल (संरेखण समेत) पर कोई विशेषज्ञ नहीं हूं। लेकिन मुझे लगता है कि पृष्ठों को गठबंधन किया जाएगा, जो मुझे लगता है कि उन पृष्ठों के भीतर किसी भी सापेक्ष सूचक को स्वचालित रूप से गठबंधन किया जाएगा। –

+0

हां, ऐसा लगता है कि मुझे समझ में नहीं आया कि वर्चुअल मेमोरी थी। –

उत्तर

8

भौतिक पता गठबंधन किया जाएगा क्योंकि वर्चुअल मेमोरी केवल गठबंधन पृष्ठों को भौतिक स्मृति में मानचित्रित करती है (और पृष्ठ आमतौर पर 4KB होते हैं)।

तो जब तक आप संरेखण> पृष्ठ आकार की जरूरत है, भौतिक स्मृति अपनी आवश्यकताओं के अनुसार गठबंधन किया जाएगा।

SSE के विशिष्ट मामले में, सब कुछ ठीक काम करता है क्योंकि आप केवल 16 बाइट संरेखण की जरूरत है।

4

मुझे किसी वास्तविक प्रणाली से अवगत नहीं है जिसमें एक गठबंधन वर्चुअल मेमोरी एड्रेस का परिणाम गलत तरीके से गलत स्मृति पता हो सकता है।

आमतौर पर, किसी दिए गए मंच पर सभी संरेखण दो की शक्तियों हो जाएगा। उदाहरण के लिए, x86 32-बिट पूर्णांक पर 4 बाइट्स (2^2) का प्राकृतिक संरेखण होता है। पृष्ठ का आकार - जो परिभाषित करता है कि आप भौतिक मेमोरी में कितना ब्लॉक कर सकते हैं - आम तौर पर बड़ी दो की शक्ति है। X86 पर, सबसे छोटा स्वीकार्य पृष्ठ आकार 4096 बाइट्स (2^12) है। 2^5 - सबसे बड़ा डेटाप्रकार कि 86 पर संरेखण आवश्यकता हो सकती है 128 बिट 32 बाइट्स (AVX के लिए) (XMM रजिस्टरों और CMPXCHG16B के लिए) है। चूंकि 2^12 2^5 से विभाजित है, आप पाएंगे कि सबकुछ एक पृष्ठ की शुरुआत में ठीक से संरेखित होता है, और चूंकि पृष्ठ वर्चुअल और भौतिक स्मृति दोनों में गठबंधन होते हैं, इसलिए वर्चुअल-गठबंधन पता हमेशा भौतिक-गठबंधन होगा।

एक और अधिक व्यावहारिक स्तर पर, असंरेखित भौतिक पते न केवल यह वास्तव में कठिन कोड उत्पन्न करने के लिए होगा करने के लिए मैप करने के लिए आभासी पतों गठबंधन की अनुमति देता है, यह भी होगा CPU वास्तुकला अधिक जटिल बस अब के बाद से किसी भी संरेखण (अनुमति देता है की तुलना में हमारे पास अजीब आकार वाले पृष्ठ और अन्य अजीबता है ...)

ध्यान दें कि आपके पास समय-समय पर किसी पृष्ठ की तुलना में बड़े संरेखण के लिए पूछने का कारण हो सकता है। आम तौर पर, उपयोगकर्ता स्थान कोडिंग के लिए, इससे कोई फर्क नहीं पड़ता कि यह भौतिक RAM में गठबंधन है (उस मामले के लिए, यदि आप एकाधिक पृष्ठों का अनुरोध कर रहे हैं, तो यह भी संगत होने की संभावना नहीं है!)। यहां समस्याएं उत्पन्न होती हैं यदि आप डिवाइस ड्राइवर लिख रहे हैं और डीएमए के लिए एक बड़े, गठबंधन, संगत ब्लॉक की आवश्यकता है। लेकिन फिर भी आमतौर पर डिवाइस बड़े-से-पेज-आकार संरेखण के बारे में एक स्टिकर नहीं है।

+0

दरअसल, सबसे बड़ी डेटाटाइप जिसे x86 पर संरेखण की आवश्यकता हो सकती है वर्तमान में 32 बाइट्स है - AVX के लिए। ऐसे अन्य मामले भी हैं जहां आप संरेखण> 32 बाइट्स का अनुरोध कर सकते हैं - यह अनुरोध करना असामान्य नहीं है कि गतिशील आवंटन पृष्ठ गठबंधन हो। –