2012-11-26 38 views
55

जब मैं वालग्रींड के खिलाफ अपना प्रोग्राम चला रहा था, तो मुझे निम्नलिखित चेतावनी का सामना करना पड़ा।यह वालग चेतावनी क्या मतलब है? - चेतावनी सेट पता श्रेणी परमिट

Warning: set address range perms: large range [0x4d59d040, 0x6159d040) (undefined) 
Warning: set address range perms: large range [0x194f7030, 0x2d4f7050) (noaccess) 
Warning: set address range perms: large range [0x3959d030, 0x6159d050) (noaccess) 

कुछ Googling बाद मैं here में पाया है कि यह एक Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions, जो मुझे बहुत नहीं बताता है।

मेरा प्रोग्राम ढेर पर बड़ी मात्रा में स्मृति आवंटित करता है। (realloc के पूरे समूह के बाद 2-3 जीबी रैम तक पहुंच सकते हैं)

हालांकि, आवंटन में से कोई भी विफल होने के बावजूद चेतावनी दिखाई दी।

तो, मुझे आश्चर्य है कि इस संदेश का वास्तव में क्या अर्थ है? मेरे पास कुछ प्रकार की मेमोरी अनुमति नहीं है? (लेकिन आवंटन सफल हुआ)

उत्तर

53

इसका मतलब यह है कि अनुमतियों को विशेष रूप से स्मृति के बड़े ब्लॉक पर बदल दिया गया है।

यह mprotect पर कॉल की तरह कुछ हो सकता है या जब एक बहुत बड़ी मेमोरी आवंटन या डेलोकेशन होता है - mmap या munmap उदाहरण के लिए कॉल करें।

आपके द्वारा सूचीबद्ध पहली व्यक्ति 320 एमबी मेमोरी को undefined पर सेट कर रही है, जो संभवतः एक नया आवंटन है, जिसे प्रारंभ में अनिर्धारित के रूप में चिह्नित किया जाएगा। अन्य दोनों समान आकार के ब्लॉक को noaccess पर सेट कर रहे हैं जो शायद स्मृति के एक विलोपन से संबंधित है।

+0

मैं देखता हूं। क्या यह ऐसा कुछ है जिसके बारे में कभी चिंतित होना चाहिए? (मैं अनुमान लगा रहा हूं कि यह 'वालग्रिंड डेवलपर्स के लाभ के लिए अधिकतर' है?) –

+8

मैंने अपने उत्तर को थोड़ा सा विस्तारित और स्पष्ट किया है लेकिन मूल रूप से, नहीं, आमतौर पर ऐसा कुछ भी नहीं है जिसके बारे में आपको चिंता करने की ज़रूरत है। – TomH

+0

क्या होगा यदि यह पांच त्रुटियों को समाप्त करता है: (परिभाषित) - (नोएकस) - (परिभाषित) - (नोएकस) - (परिभाषित)? –