10

कहें कि हमारे पास एक अनुरक्षित सरणी और लिंक की गई सूची है। डेटा संरचनाओं दोनों के लिए तत्व खोजते समय सबसे खराब मामला ओ (एन) होगा, लेकिन मेरा प्रश्न है:क्षेत्र के संदर्भ में Arrays बनाम लिंक्ड सूचियां

क्या कैश के भीतर स्थानिक इलाके के उपयोग के कारण सरणी अभी भी तेज हो जाएगी, या कैश शाखा इलाके का उपयोग करता है जो लिंक्ड सूचियों को किसी सरणी के जितना तेज हो सकता है?

एक सरणी के लिए मेरी समझ यह है कि यदि किसी तत्व को एक्सेस किया जाता है, तो स्मृति की उस ब्लॉक और आसपास के कई ब्लॉक को कैश में लाया जाता है ताकि बहुत तेज मेमोरी एक्सेस हो सके।

एक लिंक्ड सूची के लिए मेरी समझ यह है कि सूची को पार करने के लिए जो रास्ता लिया जाएगा, वह अनुमान लगाया जा सकता है, तो कैश इसका फायदा उठाएगा और फिर भी स्मृति के उपयुक्त ब्लॉक स्टोर करेगा, भले ही सूची के नोड्स दूर हो सकते हैं ढेर के भीतर।

+0

इस "शाखा इलाके" के बारे में आप क्या बात करते हैं? मुख्य स्मृति की विलंबता के आसपास कैसे कैश हो सकता है? लिंक किए गए सूची नोड्स के साथ कैश क्या करता है, कृपया वर्णन करें। – delnan

+0

@ डेलनान आप यहां शाखा इलाके के बारे में पढ़ सकते हैं: http://en.wikipedia.org/wiki/Locality_of_reference मुझे आपके दूसरे प्रश्न का उत्तर नहीं पता है। मैंने समझाया कि मुझे लगता है कि कैश मेरे प्रश्न के अंत में नोड्स के साथ क्या कर सकता है। – Kacy

+1

शाखा इलाके का विवरण एक शाखा निर्देश (इसलिए नाम) के लक्ष्य जैसे विकल्पों के एक निश्चित छोटे सेट के बारे में प्रतीत होता है। इसके विपरीत, एक लिंक्ड सूची का अगला नोड * कहीं भी * हो सकता है। मेरे दूसरे प्रश्न के लिए: समस्या कैश फिक्स मुख्य रूप से सीमित बैंडविड्थ सीमित नहीं है लेकिन सीमित विलंबता है। कैश में एक बड़े महाद्वीपीय ब्लॉक को एक बार में लोड करना (जैसा कि स्थानिक इलाके/सरणी के लिए होता है) एक सुधार है क्योंकि कैश को केवल एक बार विलंबता लागत का भुगतान करना पड़ता है। तो मेरा सवाल यह है कि कैश एक विलंबित सूची के एन नोड्स को विलंबता लागत के भुगतान के बिना कैसे लोड कर सकता है? – delnan

उत्तर

11

सरणी मामले की आपकी समझ अधिकतर सही है। यदि सरणी को अनुक्रमिक रूप से एक्सेस किया जाता है, तो कई प्रोसेसर न केवल तत्व वाले ब्लॉक को लाएंगे, बल्कि कैश मिस पर इंतजार करने वाले चक्रों को कम करने के लिए बाद के ब्लॉक को भी प्रीफ़ेच करेंगे। यदि आप इंटेल x86 प्रोसेसर का उपयोग कर रहे हैं, तो आप इंटेल x86 अनुकूलन manual में इसके बारे में विवरण प्राप्त कर सकते हैं। इसके अलावा, यदि सरणी तत्व पर्याप्त छोटे हैं, तो तत्व वाले ब्लॉक को लोड करने का अर्थ है कि अगला तत्व उसी ब्लॉक में होने की संभावना है।

दुर्भाग्य से, लिंक्ड सूचियों के लिए लोड का पैटर्न प्रोसेसर के दृष्टिकोण से अप्रत्याशित है। यह नहीं पता कि पता एक्स पर एक तत्व लोड करते समय अगला पता (एक्स +8) की सामग्री है।

एक ठोस उदाहरण के रूप में, अनुक्रमिक सरणी पहुंच के लिए लोड पतों का अनुक्रम अच्छा और अनुमानित है। उदाहरण के लिए, 1000, 1016, 1032, 1064, आदि

एक लिंक्ड सूची यह कैसा दिखाई देगा के लिए: 1000, 3048, -5040, 7888, आदि बहुत कठिन अगले पता भविष्यवाणी करने के लिए।

संबंधित मुद्दे