এখানে পোস্ট করা কারণগুলি ছাড়াও আরও একটি রয়েছে - বাইনারি সামর্থ্য । আপনি কোন std::string
বাস্তবায়নটি ব্যবহার করছেন এবং এটির মতো একই মেমরি লেআউট রয়েছে তার উপর গ্রন্থাগারগুলির লেখকদের কোনও নিয়ন্ত্রণ নেই ।
std::string
এটি একটি টেম্পলেট, সুতরাং এটির প্রয়োগটি আপনার স্থানীয় এসটিএল শিরোনাম থেকে নেওয়া হয়েছে। এখন কল্পনা করুন যে আপনি স্থানীয়ভাবে কিছু পারফরম্যান্স-অনুকূলিত এসটিএল সংস্করণ ব্যবহার করছেন, এটি মানের সাথে সম্পূর্ণ সুসংগত। উদাহরণস্বরূপ, আপনি std::string
গতিশীল বরাদ্দ এবং ক্যাশে মিসের সংখ্যা হ্রাস করতে প্রতিটিটিতে স্ট্যাটিক বাফারকে প্রবেশ করতে পছন্দ করেছেন chosen ফলস্বরূপ, মেমরি বিন্যাস এবং / বা আপনার প্রয়োগের আকার লাইব্রেরির চেয়ে আলাদা is
যদি কেবল বিন্যাসটি আলাদা std::string
হয় তবে গ্রাহকগণের কাছে লাইব্রেরি থেকে পাঠানো উদাহরণগুলিতে কিছু সদস্য ফাংশন কলগুলি বা অন্য কোনও উপায়ে ব্যর্থ হতে পারে, তার উপর নির্ভর করে কোন সদস্য স্থানান্তরিত হয়েছিল।
যদি std::string
আকারটিও আলাদা হয় তবে লাইব্রেরিতে এবং ক্লায়েন্ট কোডটিতে যাচাই করা হলে সদস্য থাকা সমস্ত লাইব্রেরির ধরণগুলি বিভিন্ন আকারের আকার ধারণ করবে। সদস্যগণের নিম্নলিখিত সদস্যদের std::string
অফসেটগুলিও স্থানান্তরিত হবে এবং গ্রাহকের কাছ থেকে ডাকা যে কোনও সরাসরি অ্যাক্সেস / ইনলাইন অ্যাক্সেসরটি লাইব্রেরীতে নিজেই ডিবাগ করার সময় "ঠিক আছে" দেখা সত্ত্বেও আবর্জনা ফিরবে।
বটমলাইন - যদি গ্রন্থাগার এবং ক্লায়েন্ট কোডগুলি আবার বিভিন্ন std::string
সংস্করণ সংকলিত হয় তবে তারা ঠিক সূক্ষ্মভাবে লিঙ্ক করবে, তবে এর ফলে কিছু বাজে, বাগগুলি বোঝা শক্ত হতে পারে। আপনি যদি নিজের std::string
প্রয়োগ পরিবর্তন করেন তবে এসটিএল থেকে প্রকাশিত সমস্ত লাইব্রেরি ক্লায়েন্টের std::string
বিন্যাসের সাথে মেলে পুনরায় সংযুক্ত করতে হবে । এবং প্রোগ্রামাররা তাদের লাইব্রেরিগুলি শক্তিশালী হতে চায় বলে আপনি খুব কমই std::string
কোথাও উন্মুক্ত দেখতে পাবেন ।
ন্যায়সঙ্গত হওয়ার জন্য, এটি সমস্ত এসটিএল ধরণের ক্ষেত্রে প্রযোজ্য। আইআইআরসি তাদের স্ট্যান্ডার্ডাইজ মেমরি লেআউট নেই।