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