"मेमोरी स्टॉम्प" क्या है?


95

मैं अभी इस ब्लॉग पोस्ट पर आया हूँ जिसमें "स्टैम्पिंग मेमोरी" का उल्लेख है:

C ++ प्रोग्राम जो आसानी से मेमोरी को स्टम्पिंग करने में सक्षम है (ऐसा कुछ जिसे आपने शायद कभी सुना भी नहीं होगा कि आप एक प्रबंधित श्रेणी की दुनिया में पैदा हुए हैं।)

और वास्तव में मैंने इसके बारे में कभी नहीं सुना है!

तो, यह क्या है, एक स्मृति stomp, stomping स्मृति? यह कब होता है?


4
मेमोरी स्टॉम्प का एक अच्छा उदाहरण यह प्रश्न है: stackoverflow.com/questions/31016660/…
फिलिप नगन

जवाबों:


117

जब कोड का एक और टुकड़ा उस मेमोरी का उपयोग इस तरीके से कर रहा होता है तो मेमोरी बिना किसी हेरफेर के मेमोरी को "स्टंप्ड" कर देती है। कई सामान्य तरीके हैं जिनसे मेमोरी को स्टोम्प किया जा सकता है।

एक, 100 बाइट्स की मेमोरी कह रहा है, लेकिन फिर 100 वें पते पर पिछले कुछ को स्टोर कर रहा है। इस मेमोरी का उपयोग पूरी तरह से कुछ अलग करने के लिए किया जा सकता है। यह विशेष रूप से डीबग करना कठिन है क्योंकि समस्या तब दिखाई देगी जब कुछ पीड़ित पर पहुंचने की कोशिश करता है जो पेट पर था, और उस पर कोड करने वाला कोड पूरी तरह से असंबंधित हो सकता है।

इसके मुक्त होने के बाद एक और मेमोरी एक्सेस कर रहा है। मेमोरी को किसी अन्य ऑब्जेक्ट के लिए आवंटित किया जा सकता है। फिर से, कोड जो समस्या दिखाता है वह नव-आबंटित ऑब्जेक्ट से संबंधित हो सकता है जो एक ही पता प्राप्त करता है और उस कोड से असंबंधित है जो समस्या का कारण बना।


3
यहाँ स्मृति पेट भरने का अच्छा उदाहरण है।
patryk.beza

33

बहुत बार यह एक बफर उग आया है; एक उदाहरण के रूप में, यह कोड:

char buffer[8];
buffer[8] = 'a';

बाद में जो कुछ भी होता है उस पर "स्टॉम्प" कर सकते हैं buffer। सामान्यतया, 'स्टॉम्पिंग' तब होता है जब स्मृति को अनायास ही लिखा जाता है।


9

अन्य उत्तर मूल रूप से सही हैं, लेकिन मैं एक उदाहरण देना चाहूंगा।

int a[10], i;       
for (i = 0; i < 11 ; i++)
    a[i] = 0;

int i, a[10];     
for (i = 0; i < 11 ; i++)
    a[i] = 0;

ये नमूने अनंत लूप में ले जा सकते हैं (या नेतृत्व नहीं कर सकते हैं), क्योंकि यह अपरिभाषित व्यवहार है।

iमेमोरी में बहुत संभव चर सरणी के बाद संग्रहीत किया जाता है। इसलिए एक्सेस करना a[10]वास्तव iमें दूसरे शब्दों में एक्सेस कर सकता है जो लूप काउंटर को रीसेट कर सकता है।

मुझे लगता है कि यह अच्छा उदाहरण है जो स्मृति को "स्टॉम्पिंग" दिखाता है।


1
वहाँ परागकोष धागा, पर चर्चा काफी है कि अलग ऑपरेटिंग सिस्टम ... पर एक ही उदाहरण stackoverflow.com/questions/31016660
ईसाई

2
@ क्रिसियन इसका ओएस से कोई लेना-देना नहीं है। यह एक अपरिभाषित व्यवहार है।
ST3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.