कोई व्यक्ति कृपया स्पष्ट करें कि एक कांटा() के बाद पॉइंटर्स के साथ क्या होता है।यूनिक्स फोर्क के बाद गतिशील रूप से आवंटित स्मृति के लिए पॉइंटर्स के साथ क्या होता है?
जैसा कि मैं इसे समझता हूं, स्टैक या स्थिर आवंटित पर कुछ भी पॉइंटर्स स्टैक/डेटा सेगमेंट रजिस्टरों के सापेक्ष हैं, इसलिए उन्हें एक कांटा के दौरान बिल्कुल कॉपी करना ठीक है।
हालांकि, अगर मैं malloc() को फोर्किंग से पहले कुछ करता हूं तो क्या होता है?
void* p = malloc(64);
// put something in *p;
fork();
// what happens to p and the memory i allocated here?
संभावनाओं मैं सोच रहा हूँ: उदाहरण के लिए
* p ढेर के किसी अन्य भाग में कॉपी किया है, पी नई-नई कॉपी स्थान प्रतिबिंबित करने के लिए अद्यतन किया जाता है।
पी अभी भी मूल को इंगित करता है। अगर कोई बच्चा मुफ्त चलाता है (पी); माता-पिता इसे एक्सेस करने में असमर्थ हो सकते हैं।
पी अभी भी मूल डेटा को इंगित करता है, लेकिन बाल प्रक्रिया में स्मृति को एक्सेस/प्रबंधित करने का अधिकार नहीं है।
इनमें से कौन सा, यदि कोई है, तो सही है?
पॉइंटर्स अभी भी वही स्मृति पता इंगित करते हैं। वर्चुअल मैपिंग अपडेट किया गया है। सूचक -> आभासी पता -> वास्तविक भौतिक पता। – jweyrich
संभावित डुप्लिकेट [सी में एक कांटा() कॉल के बाद संदर्भ पॉइंटर्स (http://stackoverflow.com/questions/4393933/referencing-pointers-after-a-fork-call-in-c) –
डुप्लिकेट [विशेष रूप से , फोर्क() लिनक्स में malloc() से गतिशील रूप से आवंटित स्मृति को कैसे संभालता है?] (http://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle- गतिशील- आवंटित- स्मृति-from-malloc -i) – IanNorton