कहानी का समय!
सी, एक भाषा के रूप में, कंप्यूटर का एक अमूर्त हिस्सा है। यह आपको चीजों को करने की अनुमति देता है, जो एक कंप्यूटर करता है, जो कि मेमोरी में हेरफेर करता है, गणित करता है, चीजों को प्रिंट करता है, आदि।
लेकिन C केवल एक अमूर्त है। और अंत में, यह जो आप से निकाल रहा है वह विधानसभा भाषा है। असेंबली वह भाषा है जिसे सीपीयू पढ़ता है, और यदि आप इसका उपयोग करते हैं, तो आप सीपीयू के संदर्भ में काम करते हैं। सीपीयू क्या करता है? मूल रूप से, यह मेमोरी से पढ़ता है, गणित करता है, और मेमोरी में लिखता है। सीपीयू स्मृति में संख्याओं पर केवल गणित नहीं करता है। सबसे पहले, आपको सीपीयू के अंदर मेमोरी से मेमोरी तक एक नंबर को स्थानांतरित करना होगा जिसे एक रजिस्टर कहा जाता है। एक बार जब आप इस नंबर पर करने की आवश्यकता होती है, तो आप इसे सामान्य सिस्टम मेमोरी में वापस ले जा सकते हैं। सिस्टम मेमोरी का उपयोग क्यों करें? रजिस्टर संख्या में सीमित हैं। आप केवल आधुनिक प्रोसेसर में लगभग सौ बाइट्स प्राप्त करते हैं, और पुराने लोकप्रिय प्रोसेसर और भी अधिक काल्पनिक रूप से सीमित थे (6502 में आपके मुफ्त उपयोग के लिए 3 8-बिट रजिस्टर थे)। तो, आपका औसत गणित ऑपरेशन जैसा दिखता है:
load first number from memory
load second number from memory
add the two
store answer into memory
इसमें से बहुत कुछ है ... गणित नहीं। वे लोड और स्टोर ऑपरेशन आपके प्रसंस्करण समय का आधा हिस्सा ले सकते हैं। C, कंप्यूटर का अमूर्त होने के नाते, प्रोग्रामर को रजिस्टरों का उपयोग करने और जुगाड़ करने की चिंता से मुक्त करता है, और चूंकि संख्या और प्रकार कंप्यूटरों के बीच भिन्न होते हैं, इसलिए C पूरी तरह से कंपाइलर पर रजिस्टर आवंटन की जिम्मेदारी देता है। एक अपवाद के साथ।
जब आप एक चर घोषित करते हैं register
, आप कंपाइलर को बता रहे हैं "यो, मैं इस वैरिएबल को बहुत इस्तेमाल करने और / या कम रहने का इरादा रखता हूं। अगर मैं होता तो मैं इसे रजिस्टर में रखने की कोशिश करता।" जब C मानक कहता है कि कंपाइलरों को वास्तव में कुछ भी नहीं करना है, ऐसा इसलिए है क्योंकि C मानक को नहीं पता है कि आप किस कंप्यूटर के लिए संकलन कर रहे हैं, और यह ऊपर 6502 की तरह हो सकता है, जहाँ सभी 3 रजिस्टरों को बस संचालित करने की आवश्यकता होती है , और अपना नंबर रखने के लिए कोई अतिरिक्त रजिस्टर नहीं है। हालाँकि, जब यह कहता है कि आप पता नहीं ले सकते, ऐसा इसलिए है क्योंकि रजिस्टरों में पते नहीं हैं। वे प्रोसेसर के हाथ हैं। चूंकि कंपाइलर को आपको कोई पता नहीं देना है, और चूँकि उसका कभी भी कोई पता नहीं चल सकता है, इसलिए कई ऑप्टिमाइज़ेशन अब कंपाइलर के लिए खुले हैं। यह, कह सकता है, संख्या को हमेशा एक रजिस्टर में रखें। यह नहीं है' टी को यह चिंता करने की ज़रूरत नहीं है कि यह कंप्यूटर मेमोरी में कहाँ संग्रहीत है (इसे फिर से प्राप्त करने की आवश्यकता से परे)। यह इसे दूसरे चर में भी सजा सकता है, इसे दूसरे प्रोसेसर को दे सकता है, इसे एक परिवर्तनशील स्थान दे सकता है, आदि।
tl; dr: अल्पकालिक चर जो बहुत सारे गणित करते हैं। एक बार में बहुत अधिक घोषित न करें।