बूलियन मान को कंप्यूटर के अंदर बाइट के रूप में क्यों संग्रहीत किया जाता है जब उसे केवल एक बिट की आवश्यकता होती है


32

मैंने हाल ही में कोड लिखना सीखना शुरू किया, और मेरी पुस्तक में मुझे इस प्रश्न के बारे में पता चला। "बूलियन मान को कंप्यूटर के अंदर बाइट के रूप में क्यों संग्रहीत किया जाता है जब इसे केवल एक बिट की आवश्यकता होती है?" क्या कोई इस सवाल पर ज्यादा प्रकाश डाल सकता है?


10
यह कड़ाई से सच नहीं बोल रहा है। कुछ भाषाएं (जैसे C / C ++) बूलियन मानों को एकल बिट के रूप में संग्रहीत करने के तरीके प्रदान करती हैं, अगर ये बिट्स एक एकल बाइट में बंडल किए जाते हैं। दूसरे शब्दों में, सी में, आप एक बाइट में आठ बूलियन स्टोर कर सकते हैं। लेकिन कभी-कभी इसका उपयोग किया जाता है क्योंकि मेमोरी सस्ती होती है और प्रोसेसर 8/16/32/64 बिट चंक्स में डेटा में हेरफेर करते हैं।
रोबोट

इसी तरह के सवाल का जवाब आपको देखना चाहिए! तुम वहाँ विशाल संदर्भ मिलेगा ... चीयर्स!
सैम


बारीकी से संबंधित: stackoverflow.com/questions/8014161/…
बेन ली

जवाबों:


49

यह सीपीयू को आसानी से संबोधित कर सकता है। उदाहरण के लिए एक x86 प्रोसेसर पर एक eax(32 बिट्स), ax(16 बिट्स) और ए ah(8 बिट्स) होता है लेकिन एक भी बिट रजिस्टर नहीं होता है। तो इसके लिए एक बिट का उपयोग करने के लिए सीपीयू को मूल्य को बदलने के लिए एक रीड / संशोधित / लिखना होगा। यदि इसे एक बाइट के रूप में संग्रहीत किया जाता है, तो एक एकल पढ़ने या लिखने का उपयोग मूल्य का निरीक्षण / परिवर्तन करने के लिए किया जा सकता है।

इसके अतिरिक्त एक को आश्चर्य हो सकता है कि एक एकल बाइट बनाम एक पूर्ण बाइट का उपयोग करना बेहतर होगा, आखिरकार एक बाइट 7 बिट्स को बर्बाद कर देगा। जब तक अंतरिक्ष एक बाधा नहीं है, तब तक बाइट के लिए जाना चाहिए क्योंकि, कम से कम x86 और मुझे लगता है कि अन्य, आमतौर पर एक बूल को जल्दी से सेट / क्लियर करने के लिए एक निर्देश है जो एक बिट के पढ़ने / संशोधित / लिखने की तुलना में बहुत तेज है। । व्यक्तिगत माप से मैंने पढ़ा है / आधुनिक / लिखने की विधि एकल निर्देश विधि की तुलना में 5x धीमी है।


6
आपके द्वारा याद किया जाने वाला एकमात्र शब्द "सीमा संरेखण" है।
मनोज आर

3
दूसरी ओर, मैंने छोटे डेटा सेट के साथ बेहतर कैश उपयोग के कारण व्यक्तिगत बिट्स का उपयोग करने से 2x गति देखा है।
माइकल बोर्गवर्ड

5

जैसा कि @ barrem23 बताते हैं , डेटा को पता होना चाहिए , और पारंपरिक आर्किटेक्चर पर सबसे छोटी सीमा एक बाइट है।

लेकिन चूंकि इस सवाल के रूप में चिह्नित किया गया है , इसके लायक इशारा बाहर है कि हो सकता है std::vector<bool>कर रहा है विशेष अनुमति देने के लिए अलग-अलग तत्वों बिट्स के रूप में संग्रहीत करने के लिए । यह कुछ कार्यक्षमता का त्याग करके स्थान बचाएगा (उदाहरण के लिए, std::searchकाम नहीं कर सकता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.