मुझे पता है कि कुछ प्रोसेसर गलत तरीके से डेटा के साथ असफल हो जाते हैं, और ओह-सामान्य-सामान्य x86 जैसे अन्य, बस इसके साथ धीमे हो जाएंगे।संरेखण अपमानजनक क्यों है?
मेरा प्रश्न है क्यों? पॉइंटर 0x12345678
से पॉइंटर 0x12345679
से डेटा प्राप्त करने के लिए x86 प्रोसेसर के लिए यह कठिन क्यों है? बस स्पष्ट होने के लिए, मुझे पता है कि डेटा त्रुटियां तब हो सकती हैं जब डेटा एकाधिक पृष्ठों में हो, और मैं समझता हूं कि स्मृति से अधिक डेटा प्राप्त करने की आवश्यकता हो सकती है (मूल्य की शुरुआत के लिए एक भाग और अंत में एक) , लेकिन यह हमेशा सत्य नहीं होता है और यह मेरा प्रश्न नहीं है। मैं पूछ रहा हूं, यह हमेशा धीमा क्यों होता है?
मान लीजिए कि स्मृति 0x10000000
पर शुरू होती है। प्रोसेसर को से 0x10000001
से 2-बाइट short
प्राप्त करना क्यों कठिन है? 0x10000000
से 0x10000001
से 4-बाइट int
क्यों प्राप्त करना मुश्किल है? इत्यादि।
क्या आप कैश लाइनों और प्री-फ़ेचिंग के बारे में भी जानते हैं? – Oded
शायद इसलिए कि उसी आकार की मेमोरी एक्सेस तब ओवरलैप नहीं हो सकती है। लेकिन दूसरी तरफ स्मृति के विभिन्न आकारों की पहुंच अभी भी ओवरलैप हो सकती है, इसलिए मुझे नहीं पता कि यह इतना क्यों हासिल करता है। – CodesInChaos
और यह न केवल पृष्ठ-दोष बल्कि कैश दोष है, और पृष्ठों की तुलना में कैश लाइन आमतौर पर बहुत छोटी होती हैं (AFAIK 64 बाइट सामान्य हैं)। लेकिन वह अभी भी कैश-लाइन के भीतर व्यवहार की व्याख्या नहीं करता है। – CodesInChaos