2010-02-25 10 views
6

मैंने कई स्थानों पर देखा है कि लोग अक्सर सी/सी ++ कोड संकलित करते समय विकल्प का उपयोग करते हैं और मुझे आश्चर्य है कि, उस विकल्प का उपयोग सुरक्षित है? इसका क्या उपयोग है?-फॉमिट-फ्रेम-पॉइंटर, क्या इसका उपयोग सुरक्षित है?

आपको बहुत धन्यवाद, शुभकामनाएं।

उत्तर

11

विकल्प सुरक्षित है लेकिन डिबगिंग को कठिन बना देता है। आम तौर पर, सी कंपाइलर कोड को आउटपुट करता है जो एक पारंपरिक रजिस्टर (ebp x86 पर) फ़ंक्शन के लिए स्टैक फ्रेम के लिए एक सूचक है। डीबगर स्थानीय चर सामग्री और अन्य ऐसी जानकारी प्रिंट करने के लिए इसका उपयोग करते हैं। ध्वज जीसीसी को उस रजिस्टर से परेशान न करने का निर्देश देता है। कुछ परिस्थितियों में, यह मामूली प्रदर्शन वृद्धि उत्पन्न कर सकता है, अधिकतर कम कोड पदचिह्न (जो कैश के लिए बेहतर है) और अतिरिक्त उपलब्ध रजिस्टर (विशेष रूप से 32-बिट मोड में x86 पर, जो रजिस्ट्रारों पर कुख्यात रूप से भूखा है) के कारण होता है।

+0

@ थॉमस आप बताए गए रजिस्टर विवरण के बारे में कुछ लिंक (यदि आप जानते हैं) प्रदान कर सकते हैं। – Adil

+0

विशिष्ट प्रोसेसर आर्किटेक्चर के लिए विशेष रूप से "अनुप्रयोग बाइनरी इंटरफ़ेस" दस्तावेज़ http://refspecs.freestandards.org/elf/ देखें। I386 के लिए एबीआई में, मानक स्टैक फ्रेम प्रारूप ('ebp' के उपयोग के साथ) पृष्ठ 36 पर वर्णित है। ईएलएफ प्रारूप कई" आधुनिक "यूनिक्स-जैसी प्रणालियों (जैसे लिनक्स और फ्रीबीएसडी) के लिए आम है। विंडोज सिस्टम पर, चीजें थोड़ा अलग होती हैं लेकिन समान सिद्धांतों का उपयोग करती हैं। –

2

जब तक आपका कोड अपरिभाषित व्यवहार पर भरोसा नहीं करता है, तो यह पूरी तरह से सुरक्षित है। यह अपरिभाषित व्यवहार कीड़े को दिखाने के लिए कारण हो सकता है।

संबंधित मुद्दे