ऐसा लगता है कि प्रत्येक .NET बुक मान प्रकार बनाम संदर्भ प्रकारों के बारे में बात करती है और इसे एक बिंदु (अक्सर गलत तरीके से) स्थिति बनाती है जहां प्रत्येक प्रकार संग्रहीत किया जाता है - ढेर या स्टैक। आमतौर पर यह पहले कुछ अध्यायों में है और कुछ महत्वपूर्ण तथ्यों के रूप में प्रस्तुत किया गया है।
मैं पूरी तरह से सहमत हूँ; मैं इसे हमेशा देखता हूं।
क्यों .NET किताबें ढेर बनाम ढेर स्मृति आवंटन के बारे में बात करते हैं?
इसका एक कारण यह है कि कई लोग C या C ++ बैकग्राउंड से C # (या अन्य .NET लैंग्वेज) में आए थे। चूँकि वे भाषाएँ आपके लिए भंडारण जीवनकाल के नियमों को लागू नहीं करती हैं, इसलिए आपको उन नियमों को जानना और उनके पालन के लिए अपने कार्यक्रम को सावधानीपूर्वक लागू करना आवश्यक है।
अब, उन नियमों को जानना और सी में उनका पालन करने की आवश्यकता नहीं है कि आप "ढेर" और "स्टैक" को समझते हैं। लेकिन अगर आप समझते हैं कि डेटा संरचनाएं कैसे काम करती हैं तो नियमों को समझना और उनका पालन करना अक्सर आसान होता है।
एक शुरुआती किताब लिखते समय एक लेखक के लिए उसी क्रम में अवधारणाओं की व्याख्या करना स्वाभाविक है जो उन्होंने उन्हें सीखा। यह जरूरी नहीं कि आदेश उपयोगकर्ता के लिए समझ में आता है। मैं हाल ही में स्कॉट डोरमैन की सी # 4 शुरुआती किताब के लिए तकनीकी संपादक था, और मुझे जो चीजें पसंद आई उनमें से एक यह था कि स्कॉट ने विषयों के लिए एक सुंदर समझदार ऑर्डर चुना, बजाय इसके कि स्मृति प्रबंधन में वास्तव में काफी उन्नत विषय हैं।
कारण का एक और हिस्सा यह है कि MSDN प्रलेखन में कुछ पृष्ठ भंडारण विचारों पर जोर देते हैं। विशेष रूप से पुराने MSDN प्रलेखन जो अभी भी शुरुआती दिनों से घूम रहा है। उस प्रलेखन में से अधिकांश में सूक्ष्म त्रुटियां हैं जो कभी भी उत्तेजित नहीं हुई हैं, और आपको यह याद रखना होगा कि यह इतिहास में विशेष समय पर और एक विशेष दर्शकों के लिए लिखा गया था।
.NET डेवलपर्स के लिए भी स्टैक बनाम हीप क्यों मायने रखता है?
मेरी राय में, यह नहीं है। यह समझने के लिए बहुत महत्वपूर्ण है कि सामान क्या है:
- एक संदर्भ प्रकार और एक मूल्य प्रकार के बीच कॉपी शब्दार्थ में क्या अंतर है?
- "रेफरी इंट एक्स" पैरामीटर कैसे व्यवहार करता है?
- मूल्य प्रकार अपरिवर्तनीय क्यों होना चाहिए?
और इसी तरह।
आप सामान आवंटित करते हैं और यह सिर्फ काम करता है, है ना?
यही आदर्श है।
अब, ऐसी स्थितियाँ हैं जिनमें यह मायने रखता है। कचरा संग्रह भयानक और अपेक्षाकृत सस्ता है, लेकिन यह मुफ़्त नहीं है। आसपास छोटी संरचनाओं को कॉपी करना अपेक्षाकृत सस्ती है, लेकिन स्वतंत्र नहीं है। यथार्थवादी प्रदर्शन परिदृश्य हैं जिसमें आपको अत्यधिक प्रतिलिपि की लागत के खिलाफ संग्रह दबाव की लागत को संतुलित करना होगा। उन मामलों में सभी प्रासंगिक मेमोरी के आकार, स्थान और वास्तविक जीवनकाल की एक मजबूत समझ होना बहुत सहायक है।
इसी तरह, यथार्थवादी इंटरोप परिदृश्य हैं जिसमें यह जानना आवश्यक है कि ढेर पर क्या है और ढेर पर क्या है, और कचरा कलेक्टर क्या चारों ओर घूम सकता है। यही कारण है कि C # में "फिक्स्ड", "स्टैकलॉक" जैसी विशेषताएं हैं।
लेकिन वे सभी उन्नत परिदृश्य हैं। आदर्श रूप से एक शुरुआती प्रोग्रामर को इस सामान में से किसी के बारे में चिंता करने की ज़रूरत नहीं है।