मैं एक बड़ी बफर है:कांटा() आईएनजी की प्रति-ऑन-राइट व्यवहार जाओ, कांटा के बिना()
char *buf = malloc(1000000000); // 1GB
अगर मैं एक नई प्रक्रिया काँटेदार, यह एक buf जिसके साथ स्मृति साझा करना होगा माता-पिता की बफ जब तक कि एक या दूसरे ने इसे लिखा न हो। फिर भी, कर्नेल द्वारा केवल एक नया 4KiB ब्लॉक आवंटित करने की आवश्यकता होगी, बाकी को साझा करना जारी रहेगा।
मैं बफ की एक प्रति बनाना चाहता हूं, लेकिन मैं केवल प्रतिलिपि को बदलने जा रहा हूं। मैं फोर्किंग के बिना कॉपी-ऑन-राइट व्यवहार चाहता हूं। (जैसे आप फोर्किंग करते समय मुफ्त में आते हैं।)
क्या यह संभव है?
सुनिश्चित करें, लेकिन यह 'मुक्त नहीं होगा' - आपको अपने स्वयं के मेमोरी प्रबंधन और परिवर्तनों का ट्रैक रखना होगा। –
हां, मैं 'मुफ्त में' चाहता हूं। मैं सोच रहा था कि क्या कोई एमएमएपी आधारित समाधान था, या हो सकता है कि मैंने कुछ कल्पना भी नहीं की थी। – fadedbee
शायद MAP_ANONYMOUS के साथ mmap और MAP_PRIVATE नौकरी करेगा? – fadedbee