बहुत से अलग प्रोसेसर मॉडल है कि मैं केवल सैद्धांतिक और सामान्य शब्दों में यह जवाब देने के लिए जा रहा हूँ रहे हैं।
16-बाइट में ऑब्जेक्ट की श्रृंखला है जिसमें कोई पता है कि आठ बाइट्स की एक बहु लेकिन 16 बाइट्स की नहीं है पर शुरू होता है पर विचार करें। आइए मान लें कि प्रोसेसर में आठ-बाइट बस है, जैसा कि प्रश्न में दर्शाया गया है, भले ही कुछ प्रोसेसर न हों। हालांकि, ध्यान दें कि सरणी में किसी बिंदु पर, ऑब्जेक्ट्स में से एक को पृष्ठ सीमा को खड़ा करना चाहिए: मेमोरी मैपिंग आमतौर पर 4096-बाइट पृष्ठों पर काम करती है जो 4096-बाइट सीमाओं से शुरू होती है। आठ-बाइट-गठबंधन सरणी के साथ, सरणी का कुछ तत्व एक पृष्ठ के बाइट 4088 से शुरू होगा और अगले पृष्ठ के बाइट 7 तक जारी रहेगा।
एक कार्यक्रम 16-बाइट उद्देश्य यह है कि एक पेज सीमा को पार लोड करने के लिए कोशिश करता है, यह अब एक भी आभासी करने के लिए भौतिक स्मृति मैप कर सकते हैं। इसे पहले आठ बाइट्स के लिए एक लुकअप करना है और दूसरे आठ बाइट्स के लिए एक और लुकअप करना है। यदि लोड/स्टोर इकाई इस के लिए डिज़ाइन नहीं की गई है, तो निर्देश को विशेष हैंडलिंग की आवश्यकता है। प्रोसेसर निर्देश को निष्पादित करने के लिए अपने प्रारंभिक प्रयास को रोक सकता है, इसे दो विशेष सूक्ष्म निर्देशों में विभाजित कर सकता है, और निष्पादन के लिए उन्हें निर्देश कतार में वापस भेज सकता है। यह कई प्रोसेसर चक्रों द्वारा निर्देश में देरी कर सकता है।
इसके अलावा, के रूप में हंस Passant बताया गया है, संरेखण कैश साथ सूचना का आदान। प्रत्येक प्रोसेसर में मेमोरी कैश होता है, और 32-बाइट या 64-बाइट "लाइनों" में कैश को व्यवस्थित करना आम बात है। यदि आप 16-बाइट ऑब्जेक्ट लोड करते हैं जो कि 16-बाइट गठबंधन है, और ऑब्जेक्ट कैश में है, तो कैश एक कैश लाइन की आपूर्ति कर सकता है जिसमें आवश्यक डेटा होता है। यदि आप 16-बाइट ऑब्जेक्ट्स को उस सरणी से लोड कर रहे हैं जो 16-बाइट गठबंधन नहीं है, तो सरणी में से कुछ ऑब्जेक्ट्स दो कैश लाइनों को खड़ा कर देगा। जब इन वस्तुओं को लोड किया जाता है, तो दो लाइनों को कैश से लाया जाना चाहिए। इसमें अधिक समय लग सकता है। यहां तक कि यदि दो लाइनें प्राप्त करने में अधिक समय नहीं लगता है, शायद प्रोसेसर को प्रति चक्र दो कैश लाइन प्रदान करने के लिए डिज़ाइन किया गया है, यह अन्य चीजों में हस्तक्षेप कर सकता है जो एक प्रोग्राम कर रहा है। आम तौर पर, एक प्रोग्राम कई स्थानों से डेटा लोड करेगा। यदि भार कुशल हैं, प्रोसेसर एक बार में दो प्रदर्शन करने में सक्षम हो सकता है। लेकिन अगर उनमें से एक को सामान्य की बजाय दो कैश लाइनों की आवश्यकता होती है, तो यह अन्य लोड संचालन के साथ-साथ निष्पादन को अवरुद्ध करता है।
साथ ही, कुछ निर्देश स्पष्ट रूप से गठबंधन पतों की आवश्यकता है। प्रोसेसर इन निर्देशों को अधिक सीधे प्रेषित कर सकता है, कुछ परीक्षणों को छोड़कर जो गठबंधन पते के बिना संचालन को ठीक करता है। जब इन निर्देशों के पते हल हो जाते हैं और उन्हें गलत तरीके से पहचाना जाता है, तो प्रोसेसर को उन्हें निरस्त करना होगा, क्योंकि फिक्स-अप ऑपरेशन को छोड़ दिया गया है।
स्रोत
2013-05-23 01:08:44
"जैसा कि हम जानते हैं, एक्स 86 सीपीयू में 64 बिट डेटा बस है" - यह सच नहीं है। x86 डेटा-बस आकारों के बारे में कुछ भी नहीं कहता है। आधुनिक प्रोसेसर में वास्तव में इसकी तुलना में बड़ी डेटा बस चौड़ाई होती है। – Mysticial
प्रोसेसर डेटा बस से डेटा नहीं पढ़ता है, वे इसे कैश से पढ़ते हैं। एक कैश लाइन सीमा straddling से बचने के लिए एक 16-बाइट संरेखण की आवश्यकता है। –
@ मैस्टिसियल मुझे लगता है कि वर्तमान में सबसे लोकप्रिय x86 CPUs में 64 बिट डेटा बस है, है ना? – iqapple