c++ - How does a hardware trap in a three-past-the-end pointer happen even if the pointer is never dereferenced? -
उसकी, हर्ब सटर लिखते हैं ...
int a [17]; Int * endA = A + 17; के लिए (int * ptr = A; ptr & lt; endA; ptr + = 5) {// ...}
[O] एन कुछ सीपीयू आर्किटेक्चर, जिसमें वर्तमान वाले शामिल हैं , उपरोक्त कोड उस बिंदु पर एक हार्डवेयर जाल उत्पन्न कर सकता है जहां तीन-अतीत-अंत-सूचक सूचक बनाया गया है, चाहे वह संकेतक कभी dereferenced हो या नहीं।
कैसे एक बिटपाटन पर सीपीयू जाल? इसके बारे में ...
int a [17]; // (i) हार्डवेयर इस जाल करेगा? Int * pugly = A + 18; // (ii) हार्डवेयर यह भी जाल करेगा? Int * pend = A + 17; ++ pend; // (iii) क्या यह मूर्ख होगा? Int * precious = A + 17; अहस्ताक्षरित लंबे समय तक tricksy = reinterpret_cast & lt; अहस्ताक्षरित लंबे> (बहुमूल्य); ++ धोखेबाज है; Int * pHobbits = reinterpret_cast & lt; int * & gt; (ट्रिक्ससी);
बोनस प्रश्न: क्या वाक्यांश "कुछ मौजूदा सीपीयू आर्किटेक्चर" को साधारणतः शिपिंग उत्पादों को संदर्भित करने के लिए समझा जाता है, या इसमें काल्पनिक आर्किटेक्चर को शामिल किया जाना चाहिए, साथ ही यदि वे कहानियों के काम में हैं एक हालिया प्रकाशन तिथि के लिए वर्णित या समझाया गया है?
पॉइंटर ऑपरेशन कार्यान्वयन-निर्भर हैं।
ऐसा हो सकता है कि कुछ प्लेटफॉर्म पर पॉइंटर मूल्यों को संग्रहीत करने के लिए केवल विशिष्ट रजिस्टरों को अनुमति दी जाती है (केवल विशिष्ट रजिस्टरों को सूचकांक रजिस्टरों के रूप में काम किया जा सकता है) और एक गैर-निजीकृत प्रोग्राम कोड द्वारा ऐसे पंजीकरण में लिखे जाने वाले मूल्य को तुरंत वैध होने के लिए चेक किया जाता है पता। इस मामले में यदि संकेतक मूल्य किसी पते से मेल खाती है जो प्रोग्राम के पते के स्थान में मौजूद नहीं है, तो हार्डवेयर जाल निश्चित रूप से घटित होगा।
यदि ऐसा कोई भी कोड है जो कंपाइलर द्वारा एक नया पॉइंटर के लिए मूल्य संभावित रूप से एक जाल पैदा कर सकता है।
Comments
Post a Comment