कोई उत्पादन malloc()
कार्यान्वयन आपको आवंटित किए गए पिछले कार्यों को लिखने से रोकने से रोकना चाहिए। यह माना जाता है कि यदि आप 123 बाइट आवंटित करते हैं, तो आप आवंटित किए गए सभी से कम या कम उपयोग करेंगे। दक्षता के लिए malloc()
, यह मानना है कि एक प्रोग्रामर अपने पॉइंटर्स का ट्रैक रखने जा रहा है।
स्मृति का उपयोग करना जो आपने स्पष्ट रूप से और सफलतापूर्वक malloc()
से अपरिभाषित व्यवहार देने के लिए कहा है। आपने n बाइट्स के लिए कहा होगा लेकिन malloc()
बाइट संरेखण के लिए अनुकूलन कार्यान्वयन के कारण n + x मिला है। या आप ब्लैक होल पर लिख सकते हैं। आप कभी नहीं जानते, यही कारण है कि यह अपरिभाषित व्यवहार है।
कहा जा रहा है ...
लेकिन इन जैसे आप अगर आप एक garbage collected variety का उपयोग किया जा मानक malloc()
सुविधा के एवज में इस्तेमाल किया जा करने की जरूरत है malloc()
कार्यान्वयन दे कि आप statistics and debugging में बनाया गया है,।
मैंने एलडी_PRELOAD के लिए सख्ती से डिजाइन किए गए वेरिएंट भी देखे हैं जो एक फ़ंक्शन का पर्दाफाश करते हैं ताकि आप कम से कम एक शून्य पॉइंटर को तर्क के रूप में कॉलबैक परिभाषित कर सकें। वह तर्क एक संरचना की अपेक्षा करता है जिसमें सांख्यिकीय डेटा शामिल है। electric fence जैसे अन्य टूल बस आपके प्रोग्राम को सटीक निर्देश पर रोक देंगे जिसके परिणामस्वरूप अमान्य ब्लॉक तक पहुंच या पहुंच हो गई है। @ आर के रूप में .. टिप्पणियों में बताता है, यह डीबगिंग के लिए बहुत अच्छा है लेकिन बेहद अक्षम है।
सब ईमानदारी में या (के रूप में वे कहते हैं) 'दिन के अंत में' - यह इस मामले में Valgrind और इससे संबंधित उपकरण (massif) के रूप में एक ढेर प्रोफाइलर इस तरह के उपयोग करने के लिए बहुत आसान है जो आप काफ़ी दे देंगे जानकारी की। इस विशेष मामले में, वालग्रिंड ने स्पष्ट रूप से बताया होगा - आपने आवंटित सीमा से पहले लिखा था। ज्यादातर मामलों में, हालांकि यह जानबूझकर नहीं है, एक अच्छा प्रोफाइलर/त्रुटि डिटेक्टर अमूल्य है।
हम पुस्तकालय है कि मैं HelenOS में जुड़े हुए का एक संस्करण इस्तेमाल किया जाना चाहिए (मुझे यकीन नहीं है कि वे अभी भी इसका उपयोग कर रहे हैं) थोड़ी देर के लिए, क्योंकि वीएमएम में डिबगिंग पागलपन के कारण जानी जाती थी।
फिर भी, भविष्य परिणामों के बारे में कठिन लगता है कि जब प्रतिस्थापन में एक बूंद पर विचार जब यह malloc()
सुविधा आप लगभग हमेशा क्या उपयोग करने के लिए प्रणाली जहाजों चाहते की बात आती है।
स्रोत
2011-03-06 21:30:27
आप भाग्यशाली थे कि आपने 4 अतिरिक्त बाइट्स द्वारा मेमोरी के किसी भी महत्वपूर्ण टुकड़े को ओवरराइड नहीं किया है, जो आपके पास नहीं है; आप हर बार ऐसे भाग्यशाली नहीं होंगे, और इससे दुर्घटना हो जाएगी। अंत में – holex