কল স্ট্যাক নীচে বা শীর্ষে শুরু হয়?


11

একটি স্ট্যাক এমন একটি জিনিস যা নীচে-উপরে .ুকে পড়ে।

সুতরাং প্রতিটি কলটি স্ট্যাকটি খালি না হওয়া পর্যন্ত এবং প্রোগ্রামটি শেষ না হওয়া অবধি স্ট্যাক থেকে আইটেমগুলি সরিয়ে ফেলার সাথে কল করা হলে কল স্ট্যাক স্ট্যাকটিতে নতুন আইটেম যুক্ত করে।

যদি উপরেরটি সঠিক হয় তবে লোকেরা কল স্ট্যাককে "আপ" মুভিং নিয়ন্ত্রণ করতে কেন উল্লেখ করে? কল স্ট্যাকটি নীচে না পৌঁছানো পর্যন্ত নিয়ন্ত্রণ অবশ্যই সরিয়ে ফেলবে


যখন কোনও ফাংশন বলা হয়, তখন স্ট্যাকের শীর্ষে একটি আইটেম যুক্ত করা হয় এবং নিয়ন্ত্রণটি সেই ফাংশনে প্রেরণ করা হয়। সুতরাং নিয়ন্ত্রণ স্ট্যাকের অন্তর্নিহিত আইটেম থেকে এটির শীর্ষ আইটেমটিতে চলে যায় - wardর্ধ্বমুখী।
বিশ্বাসঘাতক

1
@ গ্রিনজিট: "কল স্ট্যাক আপ" এক্সপ্রেশনটি ব্যতিক্রম সহ ব্যবহৃত হয়, যেখানে নিয়ন্ত্রণটি আসলে বিপরীত পথে চলে moves
মাইকেল বর্গওয়ার্ট

@ মিশেলবার্গওয়ার্ট: আপনি সঠিক আছেন।
বিশ্বাসঘাতক

1
@ মিশেলবর্গওয়ার্ট: আমি "ত্রুটিগুলি কল স্ট্যাক আপ সরাতে" অভিব্যক্তিটি দেখেছি । অবশ্যই এটি ভুল।
সিজে 7

উত্তর:


9

এই ব্যবহারের জন্য দুটি সম্ভাব্য কারণ রয়েছে:

  • ব্যতিক্রমগুলির প্রসঙ্গে কন্ট্রোলটি কলিং ফাংশন / পদ্ধতিতে চলে আসে এবং এই কলটি শ্রেণিবিন্যাস সাধারণত উপরে এবং মেথড কলগুলির মূল পদ্ধতিটি নীচের দিকে হায়ারারচি গঠন করে এবং বিমূর্ততার হ্রাস স্তরের সাথে দৃশ্যমান হয়। এই শ্রেণিবিন্যাসে, একটি ব্যতিক্রম উপরের দিকে চলে যায়।

  • একটি সাধারণ x86 অ্যাপ্লিকেশনটিতে প্রকৃত প্রোগ্রাম স্ট্যাকটি উল্টানো হয়, অর্থাৎ এটি নীচের দিকে বৃদ্ধি পায়। পুশ / পুশডাব্লু / পুশডি মেশিন কোডের নির্দেশাবলী স্ট্যাক পয়েন্টারকে হ্রাস করে। অন্যান্য স্থাপত্যগুলি এই মডেলটি ভাগ করতে পারে।


নীচে থেকে শুরু হওয়া আইটেমগুলির স্তুপ হিসাবে "স্ট্যাক" এর দৈনন্দিন ধারণার বিপরীতে কি শীর্ষ-ধারণাটি নয়?
সিজে 7

@ ক্রাইজেজে: স্ট্যাকের সামগ্রীগুলির প্রতিটি বাইটের বিটগুলি পৃথক চিপগুলিতে শারীরিকভাবে সংরক্ষণ করা হবে এ বিষয়টিও সত্য। কে পাত্তা দেয়?
মাইকেল বর্গওয়ার্ট

1

এটি সব শব্দের সংজ্ঞা উপর নির্ভর করে; এই প্রসঙ্গে "শীর্ষ" এবং "নীচে" শব্দের সাথে এবং অপারেটিং সিস্টেম বা কম্পিউটার আর্কিটেকচার বাস্তবায়নের সাথে আপনি কী বোঝাতে চাইছেন।

আমার মনে আছে অনেক আগে থেকেই, যখন আমি কমোডোর on৪ তে প্রোগ্রামিং করছিলাম address 0800 (2048) এবং F 9FFF (40959) ঠিকানার ঠিকানাটি বেসিক প্রোগ্রামগুলির জন্য সংরক্ষিত ছিল। আপনার বেসিক প্রোগ্রামের কোডটি নীচের ঠিকানায় ($ 0800, সেখান থেকে উপরের দিকে বাড়ানো) শুরু করে সংরক্ষণ করা হয়েছিল। সাব্রোটাইনগুলির ভেরিয়েবল এবং রিটার্ন ঠিকানাগুলি সংরক্ষণ করার জন্য স্ট্যাকটি সেই ব্যাপ্তির শীর্ষে (F 9FFF) শুরু হয়েছিল এবং নিম্ন ঠিকানার দিকে বেড়েছে। সুতরাং এই প্রসঙ্গে স্ট্যাকটি নীচের দিকে বাড়তে দেখলে এটি যুক্তিসঙ্গত হয়েছিল এবং আপনি যখন সাব্রোটিন থেকে ফিরে আসেন তখন সাব্রোটিনের স্ট্যাক ফ্রেমটি স্ট্যাক পয়েন্টারটিকে বাড়িয়ে দিয়ে ফেলে দেওয়া হয়েছিল, যাতে আপনি বলতে পারেন যে আপনি "স্ট্যাকটি সরিয়ে নিয়ে যাচ্ছেন" একটি subroutine থেকে ফিরে।

আমি জানি না যে এটি উদাহরণস্বরূপ উইন্ডোজ বা ইন্টেল x86 প্রসেসরের আধুনিক সংস্করণগুলিতে কীভাবে কাজ করে। হতে পারে স্ট্যাকটি অন্যদিকে কাজ করে, অর্থাত এটি নিম্ন থেকে উচ্চতর ঠিকানাগুলিতে বৃদ্ধি পায়। যদি এমনটি হয় তবে আপনি সম্ভবত "শীর্ষ", "নীচে" এবং "উপরে", "নীচে" শব্দটি প্রায় অন্যভাবে ব্যবহার করতে পারেন।


0

Foo (6, x + 1) এর মতো কোনও ফাংশন কল করতে ...

  1. কলারের প্রসঙ্গে x + 1 এর মতো প্রকৃত প্যারামিটার এক্সপ্রেশনগুলি মূল্যায়ন করুন।
  2. এই উদ্দেশ্যে নিবেদিত একটি রানটাইম "কল স্ট্যাক" এর উপর মেমরির উপযুক্ত "স্থানীয় ব্লক" চাপিয়ে foo () এর স্থানীয়দের জন্য মেমরি বরাদ্দ করুন। প্যারামিটারগুলির জন্য তবে স্থানীয় ভেরিয়েবল নয়, পদক্ষেপ (1) থেকে মানগুলি foo () এর স্থানীয় ব্লকে উপযুক্ত স্লটে সংরক্ষণ করুন।
  3. কলারের বর্তমান সম্পাদনের ঠিকানা (এটির "ফেরতের ঠিকানা") সংরক্ষণ করুন এবং এক্সিকিউশনটি foo () এ স্যুইচ করুন।
  4. foo () কল স্ট্যাকের শেষে সহজেই উপলব্ধ এটির স্থানীয় ব্লকটি দিয়ে কার্যকর করে।
  5. Foo () সমাপ্ত হলে, এটি তার স্থানীয় লোকটিকে স্ট্যাকের বাইরে ফেলে এবং পূর্বে সঞ্চিত রিটার্ন ঠিকানা ব্যবহার করে কলারে "রিটার্ন" দেয় by কলারের স্থানীয়রা এখন স্ট্যাকের শেষে এবং এটি আবার কার্যকর করা শুরু করতে পারে।

রেফারেন্স:

http://cslibrary.stanford.edu/102/PointersAndMemory.pdf (p15)


নোট করুন যে এটি কলিং কনভেনশনটির জন্য অত্যন্ত নির্দিষ্ট। কলিং কনভেনশন রয়েছে যা

0

আপনি যদি কোনও স্ট্যাকটিকে একটি ডাউন আপ জিনিস হিসাবে কল্পনা করে থাকেন, তবে এটি সাধারন মহাকর্ষীয় বাস্তবতার অধীনে টেনিস বলের সিলিন্ডারের মতো কাজ করে তখন কন্ট্রোলগুলি স্ট্যাকটিকে সরিয়ে নিয়ে যায় যেমন ফাংশন বলা হয়। ফাংশন সম্পূর্ণ হওয়ার সাথে সাথে, নিয়ন্ত্রণটি স্ট্যাকের নিচে চলে যায়।

টেনিস বলের একই সিলিন্ডারের মতো তবে বিপরীত মাধ্যাকর্ষণ সহ আপনি যদি কোনও স্ট্যাককে টপ ডাউন জিনিস হিসাবে ধারণ করে থাকেন তবে ফাংশনগুলি বলা হয়ে স্ট্যাকটি উপরে নিচে নিয়ে যায় এবং ফাংশন সম্পূর্ণ হওয়ার সাথে সাথে স্ট্যাকটি উপরে উঠে যায়।

এটি উভয়ই আপনার মাথার কেবল মডেল এবং মূলত সম্পূর্ণ নির্বিচারে। আপনি যদি পছন্দ করেন তবে এটিকে পার্শ্ব থেকে অন্য জিনিস হিসাবে ধারণ করতে পারেন তবে মানুষের সাথে যোগাযোগ করতে সমস্যা হতে পারে। আমি ব্যক্তিগতভাবে মনে করি যে A এবং B যদি C কে কল করে যে সি স্ট্যাকের নীচে (উল্টানো মহাকর্ষীয় বাস্তবতা) এবং সি-তে যদি কোনও ব্যতিক্রম ঘটে তবে আপনি সেই ব্যতিক্রমকে এ পর্যন্ত "আপ" করতে চান তবে আমি মনে করি এটি হতে পারে আরও সাধারণ ভাষার ব্যবহার কারণ অনুভূতিটি হ'ল সি গভীর নীচে এবং এ শীর্ষে রয়েছে। প্রথম ফাংশনটি স্বজ্ঞাতভাবে আমার কাছে শীর্ষে এবং ফাংশন প্রতিটি কলটিতে আরও গভীর হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.