मैं एक निश्चित जवाब की तलाश में हूँ (वास्तव में एक मौजूद हैं) कितना स्मृति पर जब boost::interprocess
के managed_shared_memory
के माध्यम से साझा स्मृति का एक स्थिर हिस्सा बनाने आवंटित किया जाना चाहिए। यहां तक कि official examples स्मृति के arbitrarily large हिस्सा आवंटित करने के लिए लग रहे हैं।कितना स्मृति 'managed_shared_memory' का आवंटन करना चाहिए? (बढ़ावा)
पर विचार करें निम्नलिखित संरचना:
// Example: simple struct with two 4-byte fields
struct Point2D {
int x, y;
};
मेरे आरंभिक प्रतिक्रिया है कि आवश्यक आकार 8 बाइट्स, या sizeof(Point2D)
होगा। यह बुरी तरह विफल रहता है जब मैं एक वस्तु के निर्माण के लिए प्रयास करते हैं, मुझे रनटाइम पर SEG-दोष दे रही है।
// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
क्या पढ़ने/लिखने आपरेशन SEG-दोष उत्पन्न कर रहा है? ढेर ऑपरेशन? अस्थायी रूप से segment.construct()
भीतर आवंटन? साझा स्मृति आवंटित करते समय कितना ओवरहेड आवश्यक है?
परीक्षण-और-त्रुटि से मैंने पाया कि 4 से आकार को गुणा करने से उपर्युक्त संरचना के लिए काम किया जा सकता है, लेकिन जब मैं अपने struct
पर अधिक फ़ील्ड जोड़ना शुरू करता हूं तो अलग हो जाता है। तो, यह एक बुरा हैक की reeks।
कुछ लोग तर्क दे सकते हैं कि आधुनिक पीसी में "स्मृति सस्ता है", लेकिन मैं इस दर्शन से असहमत हूं और अगर मुझे इससे बचा जा सकता है तो मुझे आवंटित करने से नापसंद है। मैं कल बूस्ट डॉक्स के आसपास खोदा और कोई सुझाव नहीं मिला। आज कुछ नया सीखने के लिए यहाँ है!
लोग कुछ यहाँ मेरे साथ असहमत हो सकता है, लेकिन मैं अपने जीवन की "स्मृति सस्ता है" पंक्तियों के साथ कोडित में कभी नहीं किया है। मेमोरी ख़रीदना जरूरी नहीं है कि यह कैसे इस्तेमाल होता है, लेकिन यह बहुत पैसा है। जितना अधिक आप खर्च करेंगे उतना अधिक खर्च करेंगे। मेरे कंप्यूटर के लिए मैंने जो भी मेमोरी अपग्रेड खरीदा है, मैंने अब बहुत तेज कर दिया है कि मैं "अधिक सामान चला सकता हूं"। मैंने हमेशा इस संबंध में रूढ़िवादी रूप से कोड करने की कोशिश की है क्योंकि यह मेरे आवेदन * के लिए जरूरी नहीं है *। वैसे भी, बस उस पर मेरे 2 सी :) –
मैं 100% सहमत हूँ! और यह ** संपूर्ण ** कारण है कि मैं इस सवाल से पूछ रहा हूं। मैंने केवल उस टिप्पणी को फेंक दिया ताकि किसी को यह कहने से मना कर दिया जा सके कि "कौन परवाह करता है, केवल 1k आवंटित करें और इसके साथ किया जाए।" मैं इस पोस्ट में इसे और स्पष्ट करने की कोशिश करूंगा। –
आह ठीक है :) "कुछ तर्क दे सकते हैं" बहुत बेहतर है! –