দুটি স্থানে ভেরিয়েবলগুলি মেমরিতে রাখা যেতে পারে। আপনি যখন একটি ভেরিয়েবল তৈরি করেন:
int a;
char c;
char d[16];
ভেরিয়েবলগুলি " স্ট্যাক " তৈরি করা হয়। স্ট্যাক ভেরিয়েবলগুলি সুযোগের বাইরে চলে গেলে স্বয়ংক্রিয়ভাবে মুক্ত হয় (অর্থাৎ কোডটি যখন তাদের কাছে পৌঁছাতে পারে না)। আপনি এগুলিকে "স্বয়ংক্রিয়" ভেরিয়েবল বলে শুনে থাকতে পারেন তবে এটি ফ্যাশনের বাইরে চলে গেছে।
অনেক শিক্ষানবিস উদাহরণ কেবল স্ট্যাক ভেরিয়েবল ব্যবহার করবে।
স্ট্যাকটি দুর্দান্ত কারণ এটি স্বয়ংক্রিয়। উদাহরণস্বরূপ: উইন্ডোজে, মাইক্রোসফ্ট লিঙ্কারের জন্য ডিফল্ট সেটিংসের আওতায় স্ট্যাকটি 1 এমবিতে সেট করা থাকে এবং এটি সমস্তই আপনার ভেরিয়েবলের জন্য উপলব্ধ নয়।
আপনার অ্যারে কত বড় তা সংকলনের সময় আপনি যদি না জানেন বা আপনার যদি বড় অ্যারে বা স্ট্রাক্ট দরকার হয় তবে আপনার "প্ল্যান বি" দরকার।
প্ল্যান বিকে " হিপ " বলা হয় । অপারেটিং সিস্টেমটি আপনাকে দেয় এমন আপনি সাধারণত ভেরিয়েবলগুলি তৈরি করতে পারেন তবে এটি আপনাকে নিজেই করতে হবে। আগের পোস্টিংগুলি আপনাকে এটি করতে পারে এমন এক উপায় আপনাকে দেখিয়েছিল, যদিও অন্যান্য উপায় রয়েছে:
int size;
char *p = (char *)malloc(size);
(দ্রষ্টব্য যে গাদা মধ্যে চলকগুলি সরাসরি ম্যানিপুলেটেড হয় না, তবে পয়েন্টারগুলির মাধ্যমে)
একবার আপনি একটি হিপ ভেরিয়েবল তৈরি করলে, সমস্যাটি হ'ল কম্পাইলারটি এটি সম্পন্ন করার সময় আপনাকে বলতে পারে না, সুতরাং আপনি স্বয়ংক্রিয়ভাবে প্রকাশ হারাবেন। আপনি যে "ম্যানুয়াল রিলিজিং "টির কথা উল্লেখ করেছেন সেখানে এসেছেন Your আপনার কোডটি এখন ভেরিয়েবলের আর প্রয়োজন হয় না তা নির্ধারণ করার জন্য দায়বদ্ধ এবং এটিকে ছেড়ে দিন যাতে স্মৃতিটি অন্য উদ্দেশ্যে নেওয়া যেতে পারে। উপরের মামলার জন্য, সাথে:
free(p);
এই দ্বিতীয় বিকল্পটি "দুষ্টু ব্যবসায়" কী করে তা হ'ল যখন চলকটির আর প্রয়োজন হয় না তখন তা জানার পক্ষে সর্বদা সহজ নয়। যখন আপনার প্রয়োজন হয় না তখন কোনও ভেরিয়েবল প্রকাশ করতে ভুলে যা আপনার প্রোগ্রামটির প্রয়োজন এমন আরও মেমরি গ্রাস করে। এই অবস্থাকে "ফুটো" বলা হয়। "ফাঁস" মেমরিটি কোনও কিছুর জন্য ব্যবহার করা যাবে না যতক্ষণ না আপনার প্রোগ্রামটি শেষ হয় এবং ওএস এর সমস্ত সংস্থান পুনরুদ্ধার করে না। এমনকি নাস্তিরের সমস্যাগুলি সম্ভব যদি আপনি ভুলরূপে এটির কাজটি করার আগে ভুলভাবে একটি গাদা পরিবর্তনশীল প্রকাশ করেন release
সি এবং সি ++ এ আপনি উপরে দেখানো মত আপনার হিপ ভেরিয়েবলগুলি পরিষ্কার করতে দায়বদ্ধ। তবে জাভা এবং সি # এর মতো নেট ভাষা হিসাবে ভাষা এবং পরিবেশ রয়েছে যা আলাদা পদ্ধতির ব্যবহার করে, যেখানে গাদাটি নিজে থেকে পরিষ্কার হয়ে যায়। "আবর্জনা সংগ্রহ" নামে পরিচিত এই দ্বিতীয় পদ্ধতিটি বিকাশকারীদের পক্ষে অনেক সহজ তবে আপনি ওভারহেড এবং পারফরম্যান্সে একটি জরিমানা প্রদান করেন। এটি একটি ভারসাম্য।
(আমি একটি সহজ সরল দিতে অনেকগুলি বিবরণ দেখেছি তবে আশা করি আরও সমতল উত্তর)