एक चर के लिए एक स्मृति पता मानचित्र [डुप्लिकेट]

Aug 18 2020

उस मेमोरी स्थान पर एक संरचना बनाने के लिए मैं चर के लिए मेमोरी एड्रेस को कैसे मैप करूं? मैंने दिए गए मेमोरी एड्रेस पर एक स्ट्रक्चर बनाने के लिए कोड के निम्नलिखित टुकड़े की कोशिश की, लेकिन यह सिर्फ़ सेगमेंटेशन दोष को कम करता है?

कोड में मेमोरी लोकेशन एक इनपुट क्षेत्र है, जहाँ मुझे कुछ डेटा सेट करने और एक ओपकोड के साथ डोरबेल बजाने की आवश्यकता होती है, ताकि CPU इनपुट डेटा को उठा सके और इनपुट क्षेत्र में डेटा के साथ वह क्या कहता है

    some_struct* some_struct_obj= (some_struct*)0xc321000000;
    memset(some_struct_obj, 0x00, sizeof(some_struct));

जवाब

1 eerorika Aug 17 2020 at 22:43

एक चर के लिए एक स्मृति पता मानचित्र

किसी भी चर का सटीक स्थान चुनने के लिए C ++ में कोई तरीका नहीं है। आप केवल संग्रहण वर्ग चुन सकते हैं: स्वचालित, स्थिर या थ्रेड स्थानीय। भाषा कार्यान्वयन पता चुनता है।

उस स्मृति स्थान पर एक संरचना बनाने के लिए मैं कैसे एक स्मृति पते को मैप करूं?

जब तक कि मेमोरी आवंटित की जाती है, तब तक किसी भी मेमोरी एड्रेस में डायनेमिक स्टोरेज (जो कि वैरिएबल नहीं है) के साथ ऑब्जेक्ट बनाना संभव है और इसमें नॉन-ट्रिवियल ऑब्जेक्ट नहीं होते हैं। इसे प्लेसमेंट नई अभिव्यक्ति, या कुछ मानक कार्यों का उपयोग करके प्राप्त किया जा सकता है जो प्लेसमेंट को आंतरिक रूप से नया बनाते हैं।

स्मृति को मनमाने पते से आवंटित करने के लिए मानक C ++ में कोई रास्ता नहीं है। भाषा कार्यान्वयन चर और गतिशील वस्तुओं के लिए स्मृति आवंटित करने का ध्यान रखता है।

वर्चुअल मेमोरी के बिना एम्बेडेड सिस्टम पर, भाषा कार्यान्वयन विशिष्ट मेमोरी एड्रेस रेंज को आवंटित के रूप में दस्तावेज कर सकता है। ऐसे मामले में, आप बस उस मेमोरी में ऑब्जेक्ट बनाने के लिए प्लेसमेंट नए का उपयोग कर सकते हैं। ऐसे पतों का उपयोग अन्य प्रणालियों के लिए पोर्टेबल नहीं होगा।


गैर-मानक तरीके के बारे में कैसे? हाँ, यह मौजूद हो सकता है। उदाहरण के लिए, POSIX मानक mmapकार्य निर्दिष्ट करता है:

pa=mmap(addr, len, prot, flags, fildes, off);

पैरामीटर flagsमैप किए गए डेटा की हैंडलिंग के बारे में अन्य जानकारी प्रदान करता है। झंडे का मूल्य इन विकल्पों में से बिटवाइन-समावेशी OR है, जिसे <sys / mman.h> में परिभाषित किया गया है:

Symbolic Constant  Description
MAP_SHARED         Changes are shared.
MAP_PRIVATE        Changes are private.
MAP_FIXED          Interpret addr exactly.

जब MAP_FIXEDझंडे के तर्क में सेट किया जाता है, तो कार्यान्वयन को सूचित किया जाता है कि पा का मूल्य addrवास्तव में होगा।

हालांकि लिनक्स मैनपेसेज से निम्नलिखित पर विचार करें:

इसके लिए एकमात्र सुरक्षित उपयोग MAP_FIXEDवह है जहां addrपहले और लंबाई द्वारा निर्दिष्ट पते की सीमा एक और मानचित्रण का उपयोग करके आरक्षित की गई थी; अन्यथा, उपयोग MAP_FIXEDखतरनाक है क्योंकि यह जबरन preexisting मैपिंग को हटा देता है, जिससे एक मल्टीथ्रेड प्रक्रिया के लिए अपना स्वयं का पता स्थान दूषित करना आसान हो जाता है।