এর অর্থ কি বেস পয়েন্টার বা স্ট্যাক পয়েন্টারটি আসলে উপরে যাওয়ার পরিবর্তে মেমরিের ঠিকানাগুলি নীচে নিয়ে যাচ্ছে? তা কেন?
হ্যাঁ, push
নির্দেশাবলী স্ট্যাক পয়েন্টার হ্রাস করে এবং স্ট্যাকটিতে লিখুন, যখন pop
বিপরীত করুন, স্ট্যাক থেকে পড়ুন এবং স্ট্যাক পয়েন্টারটি বৃদ্ধি করুন।
এটি কিছুটা historicalতিহাসিক যে সীমিত মেমরিযুক্ত মেশিনগুলির জন্য, স্ট্যাকটি উচ্চতর এবং নীচের দিকে বড় করা হয়েছিল, যখন গাদাটি নীচে স্থাপন করা হয়েছিল এবং উপরের দিকে বাড়ানো হয়েছিল। "ফ্রি মেমোরি" এর একটি মাত্র ফাঁক আছে - হিপ এবং স্ট্যাকের মধ্যে এবং এই ফাঁকটি ভাগ করা হয়, হয় পৃথকভাবে যেমন প্রয়োজন হয় তেমন কোনও একটি ফাঁকেও বাড়তে পারে। সুতরাং, যখন স্ট্যাক এবং হিপগুলি কোনও নিখরচায় স্মৃতি ছাড়েনি তখন প্রোগ্রামটি কেবল মেমরির বাইরে চলে যায়।
যদি স্ট্যাক এবং হিপ উভয়ই একই দিকে বৃদ্ধি পায় তবে দুটি ফাঁক রয়েছে এবং স্ট্যাকটি সত্যিই স্তূপের ফাঁকায় বাড়তে পারে না (বিপরীতে এছাড়াও সমস্যাযুক্ত)।
মূলত, প্রসেসরের কাছে কোনও ডেডিকেটেড স্ট্যাক হ্যান্ডলিংয়ের নির্দেশ ছিল না। তবে, হার্ডওয়্যারটিতে স্ট্যাক সমর্থন যুক্ত হওয়ার সাথে সাথে এটি নীচের দিকে বাড়ার এই ধরণটি গ্রহণ করেছে এবং প্রসেসরগুলি আজও এই প্যাটার্নটি অনুসরণ করে।
কেউ তর্ক করতে পারে যে 64৪-বিট মেশিনে একাধিক ফাঁক দেওয়ার অনুমতি দেওয়ার জন্য পর্যাপ্ত ঠিকানা স্থান রয়েছে - এবং প্রমাণ হিসাবে, যখন কোনও প্রক্রিয়াতে একাধিক থ্রেড থাকে তখন একাধিক ফাঁকগুলি অবশ্যই ঘটে থাকে। যদিও চারপাশের জিনিসগুলিকে পরিবর্তন করার পক্ষে এটি যথেষ্ট অনুপ্রেরণা নয়, যেহেতু একাধিক ব্যবধান সিস্টেমের সাথে বর্ধনের দিকটি তর্কসাপেক্ষভাবে স্বেচ্ছাসেবী, সুতরাং traditionতিহ্য / সামঞ্জস্যতা স্কেলকে পরামর্শ দেয়।
আপনি যাতে স্ট্যাকের দিক পরিবর্তন, বা অন্য নিবেদিত ঠেলাঠেলি & পপিং নির্দেশাবলী (যেমন ব্যবহারের উপর ছেড়ে দিতে হবে হবে CPU- র স্ট্যাকের হ্যান্ডলিং নির্দেশাবলী পরিবর্তন করতে হবে চাই push
, pop
, call
, ret
, অন্যদের)।
নোট করুন যে এমআইপিএস নির্দেশ সেট আর্কিটেকচারটি ডেডিকেটেড push
& নেই pop
, সুতরাং উভয় দিকেই স্ট্যাকটি বৃদ্ধি করা ব্যবহারিক - আপনি এখনও একটি থ্রেড প্রক্রিয়াটির জন্য একটি ফাঁক মেমরি লেআউট চাইতে পারেন, তবে স্ট্যাকটি উপরের দিকে এবং গাদাটি বাড়িয়ে তুলতে পারেন নীচের দিকে। আপনি যদি এটি করেন তবে, কিছু সি ভ্যারাগস কোডের উত্স বা হুডের নীচে প্যারামিটার পাসিংয়ের ক্ষেত্রে সামঞ্জস্যতার প্রয়োজন হতে পারে।
(আসলে, যেহেতু এমআইপিএসে কোনও উত্সর্গীকৃত স্ট্যাক হ্যান্ডলিং নেই, তাই আমরা স্ট্যাকের উপরে চাপ দেওয়ার জন্য প্রাক বা পোস্ট ইনক্রিমেন্ট বা প্রাক বা পোস্ট হ্রাস ব্যবহার করতে পারতাম যতক্ষণ না আমরা স্ট্যাকটি পপিংয়ের জন্য সঠিক বিপরীতটি ব্যবহার করেছি, এবং ধরেও নিলাম যে অপারেটিং সিস্টেমটি নির্বাচিত স্ট্যাক ব্যবহারের মডেলকে সম্মান করে Indeed প্রকৃতপক্ষে কিছু এম্বেডেড সিস্টেম এবং কিছু শিক্ষাব্যবস্থায় এমআইপিএস স্ট্যাকটি উপরের দিকে বড় হয়))
-4(%rbp)
বেস পয়েন্টারটি মোটেও সরায়+4(%rbp)
না এবং সম্ভবত এটি কাজ করতে পারে না।