আপনার ভেরিয়েবলটি d
সাধারণত স্ট্যাক থেকে পপড হয় না। কোঁকড়া ধনুর্বন্ধনী বুনন একটি স্ট্যাক ফ্রেম বোঝায় না। অন্যথায়, আপনি এই জাতীয় কিছু করতে সক্ষম হবেন না:
char var = getch();
{
char next_var = var + 1;
use_variable(next_char);
}
যদি কোঁকড়া ধনুর্বন্ধনী সত্যিকারের স্ট্যাক পুশ / পপ সৃষ্টি করে (যেমন একটি ফাংশন কল করবে), তবে উপরের কোডটি সংকলন করবে না কারণ ধনুর্বন্ধনের অভ্যন্তরের কোডটি বন্ধনীগুলির var
বাইরে যে চলকটি অ্যাক্সেস করতে সক্ষম হবে না (ঠিক যেমন একটি সাব- ফাংশন কলিং ফাংশনে সরাসরি ভেরিয়েবল অ্যাক্সেস করতে পারে না)। আমরা জানি যে এটি ঘটনা নয়।
কোঁকড়া ধনুর্বন্ধনী কেবল স্কোপিংয়ের জন্য ব্যবহৃত হয়। সংকলকটি বন্ধনীযুক্ত বন্ধনীগুলির বাইরে থেকে "অভ্যন্তরীণ" ভেরিয়েবলের যে কোনও অ্যাক্সেসকে অবৈধ হিসাবে বিবেচনা করবে এবং এটি সেই স্মৃতিটিকে অন্য কোনও কিছুর জন্য পুনরায় ব্যবহার করতে পারে (এটি বাস্তবায়ন-নির্ভর)। যাইহোক, ঘেরের ফাংশনটি না ফেরানো পর্যন্ত এটি স্ট্যাকের বাইরে পপ করা যাবে না।
আপডেট: সি স্পিকে কী বলতে হবে তা এখানে । স্বয়ংক্রিয় সঞ্চয়ের সময়কাল সহ বিভাগগুলি সম্পর্কে (বিভাগ 6.4.2):
যে কোনও অবজেক্টে ভেরিয়েবলের দৈর্ঘ্যের অ্যারে টাইপ নেই, তার ব্লকটিতে প্রবেশের সময় থেকে তার জীবনকাল প্রসারিত হয় যার সাথে এটি যুক্ত থাকে যতক্ষণ না of ব্লকের কার্য সম্পাদন কোনওভাবে শেষ না হয়।
একই বিভাগটি "আজীবন" শব্দটিকে (জোর দেওয়া খনি) হিসাবে সংজ্ঞায়িত করে:
জীবদ্দশায় একটি বস্তুর প্রোগ্রাম সঞ্চালনের সময় স্টোরেজ হয় অংশ নিশ্চিত এটা জন্য সংরক্ষিত করা হয়। একটি অবজেক্ট বিদ্যমান, একটি স্থির ঠিকানা আছে, এবং তার জীবনকাল জুড়ে এটি সর্বশেষ-সঞ্চিত মান ধরে রাখে। যদি কোনও বস্তুকে তার জীবদ্দশার বাইরে উল্লেখ করা হয়, তবে আচরণটি সংজ্ঞায়িত।
এখানে মূল শব্দটি অবশ্যই 'গ্যারান্টিযুক্ত'। একবার আপনি বন্ধনীগুলির অভ্যন্তরীণ সেটটির সুযোগ ছেড়ে গেলে অ্যারের জীবনকাল শেষ হয়ে যায়। স্টোরেজ এর জন্য এখনও বরাদ্দ হতে পারে বা নাও হতে পারে (আপনার সংকলক অন্য কোনও কিছুর জন্য আবার জায়গাটি ব্যবহার করতে পারে), তবে অ্যারের অ্যাক্সেসের যে কোনও প্রচেষ্টা অনির্ধারিত আচরণ এবং অনাকাঙ্ক্ষিত ফলাফল আনার জন্য প্রচেষ্টা করে about
সি স্পেকের স্ট্যাক ফ্রেমের কোনও ধারণা নেই। এটি কেবল ফলস্বরূপ প্রোগ্রামটি কী আচরণ করবে সে সম্পর্কেই কথা বলে এবং বাস্তবায়নের বিবরণটি সংকলকটিতে ফেলে দেয় (সর্বোপরি বাস্তবায়নটি স্ট্যাকলেস সিপিইউতে হার্ডওয়ার স্ট্যাকের সিপিইউর চেয়ে বেশ আলাদা দেখায়)। সি স্পেসে এমন কোনও কিছুই নেই যা ম্যান্ডেট দেয় যেখানে স্ট্যাক ফ্রেম শেষ হবে বা শেষ হবে না। জানার একমাত্র আসল উপায়টি হল আপনার নির্দিষ্ট সংকলক / প্ল্যাটফর্মের কোডটি সংকলন করা এবং ফলস্বরূপ সমাবেশটি পরীক্ষা করা। আপনার সংকলকটির বর্তমান অপ্টিমাইজেশন বিকল্পগুলির সেটটি সম্ভবত এটিতেও ভূমিকা রাখবে।
আপনি যদি নিশ্চিত করতে চান যে d
আপনার কোডটি চলার সময় অ্যারে আর মেমরি খাচ্ছে না, আপনি কোঁকড়ানো ধনুর্বন্ধনীগুলিতে কোডটি পৃথক ফাংশনে বা স্পষ্টতই malloc
এবং মেমরিটিকে free
স্বয়ংক্রিয় স্টোরেজ ব্যবহার না করে রূপান্তর করতে পারেন ।