মেমরি বিভাজন হ'ল ডিস্ক বিভাজন হিসাবে একই ধারণা: এটি স্থান নষ্ট হওয়া বোঝায় কারণ ব্যবহৃত অঞ্চলগুলি একসাথে যথেষ্ট পরিমাণে প্যাক না করে।
ধরুন, একটি সাধারণ খেলনা উদাহরণের জন্য আপনার মেমরির দশটি বাইট রয়েছে:
| | | | | | | | | | |
0 1 2 3 4 5 6 7 8 9
এবার আসুন তিন, তিনটি বাইট ব্লক, নাম দিন এ, বি এবং সি:
| A | A | A | B | B | B | C | C | C | |
0 1 2 3 4 5 6 7 8 9
এখন বি ব্লক বিলোপ করুন:
| A | A | A | | | | C | C | C | |
0 1 2 3 4 5 6 7 8 9
এখন যদি আমরা একটি চার-বাইট ব্লক ডি বরাদ্দ করার চেষ্টা করি তবে কী হবে? ঠিক আছে, আমাদের চারটি বাইট মেমরি ফ্রি আছে, তবে আমাদের কাছে মেমরি ফ্রি চারটি স্বতন্ত্র বাইট নেই, তাই আমরা ডি বরাদ্দ করতে পারি না! এটি মেমরির অকার্যকর ব্যবহার, কারণ আমাদের ডি সঞ্চয় করতে সক্ষম হওয়া উচিত ছিল, কিন্তু আমরা এটি করতে পারিনি। এবং আমরা ঘর তৈরিতে সি স্থানান্তরিত করতে পারি না, কারণ খুব সম্ভবত আমাদের প্রোগ্রামে কিছু ভেরিয়েবল সি নির্দেশ করছে এবং আমরা স্বয়ংক্রিয়ভাবে এই সমস্ত মান খুঁজে পেতে এবং এটি পরিবর্তন করতে পারি না।
আপনি কীভাবে জানবেন যে এটি একটি সমস্যা? ভাল, সবচেয়ে বড় লক্ষণটি হ'ল আপনি যে মেমরিটি ব্যবহার করছেন তা তার চেয়ে আপনার প্রোগ্রামটির ভার্চুয়াল মেমরির আকারটি যথেষ্ট বড়। বাস্তব-জগতের উদাহরণে, আপনার কাছে মেমরির দশটি বেশি বাইট থাকবে, সুতরাং ডি কেবলমাত্র 9 বাইট শুরু করে বরাদ্দ পেয়েছে এবং 3-5 বাইট অব্যবহৃত থাকবে যদি না আপনি পরে তিন বাট দীর্ঘ বা আরও কিছু বরাদ্দ করেন।
এই উদাহরণস্বরূপ, 3 বাইট পুরোপুরি নষ্ট করার মতো নয়, তবে আরও রোগতাত্ত্বিক ক্ষেত্রে বিবেচনা করুন যেখানে এএ দম্পতি বাইটের দুটি বরাদ্দ হয়, উদাহরণস্বরূপ, মেমরির বাইরে দশ মেগাবাইট আলাদা এবং আপনাকে 10 মেগাবাইট আকারের একটি ব্লক বরাদ্দ করতে হবে + 1 বাইট এটি করার জন্য আপনাকে ওএসকে দশ মেগাবাইটেরও বেশি ভার্চুয়াল মেমরির জন্য জিজ্ঞাসা করতে হবে, যদিও আপনি ইতিমধ্যে পর্যাপ্ত জায়গা থাকার বিষয়ে কেবলমাত্র একজন বাইট লজ্জা পান।
আপনি কিভাবে এটি প্রতিরোধ করবেন? আপনি ঘন ঘন ছোট ছোট বস্তু তৈরি এবং ধ্বংস করার সময় সবচেয়ে খারাপ পরিস্থিতি দেখা দেয়, যেহেতু এটি অনেকগুলি ছোট ছোট গর্ত দ্বারা বিভাজিত অনেকগুলি ছোট ছোট বস্তুর সাথে "সুইস পনির" প্রভাব তৈরি করে, এই গর্তগুলিতে বৃহত্তর বস্তু বরাদ্দ করা অসম্ভব হয়ে পড়ে। আপনি যখন জানেন যে আপনি এটি করতে যাচ্ছেন, কার্যকর কৌশল হ'ল আপনার ছোট ছোট বস্তুর জন্য পুল হিসাবে মেমরির একটি বৃহত ব্লককে প্রাক-বরাদ্দ করা এবং তারপরে সেই ব্লকের মধ্যে ছোট বস্তুর সৃষ্টি ম্যানুয়ালি পরিচালনা করা ting ডিফল্ট বরাদ্দকারী এটি হ্যান্ডেল করে।
সাধারণভাবে, আপনি যত কম বরাদ্দ করেন, মেমরির খণ্ডিত হওয়ার সম্ভাবনা কম থাকে। তবে এসটিএল এর পরিবর্তে কার্যকরভাবে ডিল করে। আপনার যদি এমন স্ট্রিং থাকে যা এটির বর্তমান বরাদ্দের পুরোপুরি ব্যবহার করে এবং আপনি এর সাথে একটি চরিত্র যুক্ত করেন তবে এটি কেবল তার বর্তমান দৈর্ঘ্য প্লাস একটিতে পুনরায় বরাদ্দ করে না, এটি দৈর্ঘ্য দ্বিগুণ করে। এটি "ঘনঘন ছোট বরাদ্দের জন্য পুল" কৌশলটিতে একটি প্রকরণ। স্ট্রিংটি মেমরির একটি বিশাল অংশটি ধরেছে যাতে এটি পুনরাবৃত্ত ছোট ছোট পুনর্বিবেচনা না করে আকারে বারবার ছোট বৃদ্ধি সহ দক্ষতার সাথে ডিল করতে পারে। সমস্ত এসটিএল কনটেইনার আসলে এই ধরণের কাজ করে, তাই সাধারণত আপনার এসটিএল কনটেইনারগুলি স্বয়ংক্রিয়ভাবে পুনঃ-পুনঃনির্মাণের ফলে খণ্ডিত হওয়া সম্পর্কে খুব বেশি চিন্তা করার দরকার নেই।
যদিও অবশ্যই এসটিএল কনটেইনারগুলি একে অপরের মধ্যে স্মৃতিচারণ করে না , সুতরাং আপনি যদি অনেকগুলি ছোট পাত্রে তৈরি করতে যাচ্ছেন (তবে কয়েকটি পাত্রে যা প্রায়শই পুনরায় আকার দেওয়া হয়) আপনি একইভাবে টুকরোজ প্রতিরোধে নিজেকে উদ্বেগ করতে পারেন যে কোনও ঘন ঘন তৈরি ছোট ছোট বস্তুর জন্য, এসটিএল বা না।