2012-09-18 20 views
11

में सीपीयू द्वारा स्मृति का एक भी बाइट एक्सेस किया जाता है, मैं समझता हूं कि 32 या 64 बिट सिस्टम का अर्थ क्या है। इसलिए मूल रूप से सभी रजिस्टरों या शब्द की लंबाई या तो 32 या 64 बिट है।32-बिट मेमोरी और 32-बिट प्रोसेसर

सादगी के लिए हमें 32 बिट सिस्टम लेना चाहिए और कहें कि मैं सी में एक प्रोग्राम लिख रहा हूं यदि मैं एक इंट टाइप घोषित करता हूं तो "int a = 5;" फिर एक शब्द की लंबाई का एक स्मृति स्थान var a के लिए आरक्षित है। इसलिए जब भी मैं इसे एक्सेस करना चाहता हूं तो मैं उस स्मृति स्थान के लिए शब्द पता का उपयोग कर ऐसा कर सकता हूं।

लेकिन कहें कि मेरे पास 4 अक्षर हैं "char a, b, c, d;" चूंकि यह एक बाइट है, उनमें से प्रत्येक को एक शब्द में रखा गया है, तो अगर मैं केवल चार बी तक पहुंचना चाहता हूं तो मैं क्या करूँ? (कह रहा है कि स्मृति बाइट एड्रेसेबल है) अब कहें बी शब्द में तीसरा बाइट है ... तो यह बस पर कैसे आती है? बस में 17 वीं से 24 वीं लाइन तक तीसरी बाइट हार्ड वायर्ड नहीं है? तो अन्य 24 लाइनों के साथ क्या होता है जब केवल बी का उपयोग किया जा रहा है?

+0

उस विशेष सीपीयू के लिए मशीन भाषा, असेंबली भाषा, विशेष रूप से मेमोरी एड्रेसिंग और सीपीयू रजिस्टरों के बारे में भागों की जांच करें। – theglauber

+1

@ दीपक, बाइट एड्रेसिंग का समर्थन करने वाले 32 बिट प्लेटफार्मों पर, स्मृति के लिए एक बाइट लिखना संभव है, अन्य तीन बाइट लिखे गए हैं (बाइट सक्षम संकेतों को बंद करें)। –

+0

@EricZ, अब क्या होगा यदि बाइट मैं चाहता हूं कि स्मृति में दूसरा बाइट (शून्य से गिनती शुरू हो) हो? आम तौर पर जब मैं स्मृति से एक शब्द का उपयोग करता हूं, तो दूसरा बाइट रजिस्टर की बिट स्थिति 23 - 16 के बीच बढ़ता है। लेकिन इस मामले में इसे 7 - 0 स्थिति में उतरना होगा। यह मुझे भ्रमित करता है क्योंकि मैंने सोचा था कि स्मृति से बिट 0 रजिस्टर के बिट 0 में उतरने के लिए तारित है, और 31 से थोड़ा 31 तक। मैंने सोचा था कि यह था सर्किट्री में सभी, तो थोड़ी सी स्थिति में जमीन पर उतरने के लिए थोड़ा सा कैसे हो सकता है, बाइट एक्सेस के दौरान स्थिति 0 पर उतरता है? – deepak

उत्तर

3

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

3

यह असेंबलर पर निर्भर करता है, यह स्मृति का एक शब्द या बाइट देना चुन सकता है।
तो अब यदि आपके पास शब्द में 4 अलग-अलग वर्ण हैं, तो क्या होगा, उनमें से सभी एक बार में पहुंचे हैं, लेकिन केवल आपको जिसकी आवश्यकता है वह संचालित है। यानी वे सभी स्मृति से प्रोसेसर में आते हैं, फिर केवल बाइट जिसे आप चाहते हैं, माना जाता है, दूसरों को खारिज कर दिया जाता है।

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