मॉड्यूलर दृष्टिकोण सामान्य (पोर्टेबल और साफ) में बहुत आसान होते हैं, इसलिए मैं संभव के रूप में किसी भी अन्य मॉड्यूल से स्वतंत्र के रूप में मॉड्यूल प्रोग्राम करने की कोशिश करता हूं। मेरे अधिकांश दृष्टिकोण एक संरचना पर आधारित हैं जो मॉड्यूल का वर्णन करता है। एक इनिशियलाइज़ेशन फ़ंक्शन प्राथमिक मापदंडों को सेट करता है, बाद में एक हैंडलर (डिसिप्रेटिव स्ट्रक्चर के लिए पॉइंटर) को मॉड्यूल के अंदर जो भी फ़ंक्शन कहा जाता है उसे पास किया जाता है।
अभी, मैं सोच रहा हूं कि मॉड्यूल का वर्णन करने वाली संरचना के लिए आवंटन मेमोरी का सबसे अच्छा तरीका क्या हो सकता है। यदि संभव हो, तो मैं निम्नलिखित चाहूंगा:
- अपारदर्शी संरचना, इसलिए संरचना केवल प्रदान किए गए इंटरफ़ेस फ़ंक्शंस के उपयोग से बदल सकती है
- कई उदाहरण हैं
- लिंकर द्वारा आवंटित स्मृति
मैं निम्नलिखित संभावनाओं को देखता हूं, कि मेरे एक लक्ष्य के साथ सभी संघर्ष:
वैश्विक घोषणा
कई उदाहरण, लिंकर द्वारा आवंटित, लेकिन संरचना अपारदर्शी नहीं है
(#includes)
module_struct module;
void main(){
module_init(&module);
}
malloc
अपारदर्शी संरचना, कई उदाहरण, लेकिन ढेर पर आवंटन
मॉड्यूल में:
typedef module_struct Module;
मॉड्यूल। init फ़ंक्शन, आवंटित स्मृति में मॉलोक और रिटर्न पॉइंटर
module_mem = malloc(sizeof(module_struct ));
/* initialize values here */
return module_mem;
में मुख्य
(#includes)
Module *module;
void main(){
module = module_init();
}
मॉड्यूल में घोषणा
अपारदर्शी संरचना, लिंकर द्वारा आवंटित, केवल एक पूर्वनिर्धारित संख्या के उदाहरण
मॉड्यूल के लिए पूरी संरचना और मेमोरी को आंतरिक रखें और हैंडलर या संरचना को कभी उजागर न करें।
(#includes)
void main(){
module_init(_no_param_or_index_if_multiple_instances_possible_);
}
क्या अपारदर्शी संरचना, लिंकर के बजाय ढेर आवंटन और कई / किसी भी उदाहरण के लिए किसी भी तरह से संयोजन करने का विकल्प है?
समाधान
जैसा कि नीचे कुछ उत्तरों में प्रस्तावित है, मुझे लगता है कि सबसे अच्छा तरीका यह है:
- मॉड्यूल स्रोत फ़ाइल में MODULE_MAX_INSTANCE_COUNT मॉड्यूल के लिए आरक्षित स्थान
- मॉड्यूल में MODULE_MAX_INSTANCE_COUNT को परिभाषित न करें
- मॉड्यूल हेडर फ़ाइल के लिए #ifndef MODULE_MAX_INSTANCE_COUNT #error जोड़ें यह सुनिश्चित करने के लिए कि मॉड्यूल उपयोगकर्ता इस सीमा से अवगत है और आवेदन के लिए वांछित उदाहरणों की अधिकतम संख्या को परिभाषित करता है।
- इंस्टेंस के आरंभीकरण पर या तो डेस्क्रिकिव स्ट्रक्चर या मॉड्यूल इंडेक्स (जो भी अधिक पसंद हो) का मेमोरी एड्रेस (* शून्य) वापस कर दें