মডিউলার পদ্ধতিগুলি সাধারণভাবে বহনযোগ্য (পোর্টেবল এবং ক্লিন), তাই আমি মডিউলগুলি যতটা সম্ভব অন্য কোনও মডিউলগুলির চেয়ে পৃথক হিসাবে প্রোগ্রাম করার চেষ্টা করি। আমার বেশিরভাগ পন্থা এমন স্ট্রাক্টের উপর ভিত্তি করে যা মডিউলটি নিজেই বর্ণনা করে। একটি ইনিশিয়ালেশন ফাংশন প্রাথমিক পরামিতিগুলি সেট করে, তারপরে মডিউলটির ভিতরে যে কোনও ফাংশন বলে তাকে একটি হ্যান্ডলার (ডিসাইপটিভ স্ট্রাক্টের দিকে নির্দেশক) দেওয়া হয়।
এই মুহুর্তে, আমি ভাবছি যে মডিউল বর্ণনা করে কাঠামোর জন্য বরাদ্দ মেমরির সেরা পদ্ধতির কী হতে পারে। যদি সম্ভব হয় তবে আমি নিম্নলিখিতগুলি চাই:
- অস্বচ্ছ স্ট্রাক্ট, সুতরাং স্ট্রাক্ট কেবল সরবরাহ করা ইন্টারফেস ফাংশন ব্যবহারের মাধ্যমে পরিবর্তিত হতে পারে
- একাধিক দৃষ্টান্ত
- লিঙ্কার দ্বারা বরাদ্দ মেমরি
আমি নিম্নলিখিত সম্ভাবনাগুলি দেখতে পাচ্ছি, আমার লক্ষ্যগুলির সাথে এটির সমস্ত দ্বন্দ্ব রয়েছে:
বিশ্বব্যাপী ঘোষণা
লিঙ্কার দ্বারা বরাদ্দকৃত একাধিক উদাহরণ, তবে স্ট্রাকটি অস্বচ্ছ নয়
(#includes)
module_struct module;
void main(){
module_init(&module);
}
যদি malloc
অস্বচ্ছ স্ট্রাক্ট, একাধিক উদাহরণ, তবে স্তূপে অ্যালকোশন
মডিউলে। h:
typedef module_struct Module;
মডিউল.২০ ডি ইন ফাংশনে, বরাদ্দ মেমরিতে ম্যালোক এবং রিটার্ন পয়েন্টার
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 # ত্রুটি যুক্ত করুন
- উদাহরণের সূচনাতে ডেসক্রিপটিভ স্ট্রাক্টের মেমরি ঠিকানা (* অকার্যকর) বা মডিউল সূচক (আপনি যা পছন্দ করেন) তা ফেরত দিন