আমি প্রোগ্রামিং ভাষার নিম্ন স্তরের অপারেশনগুলি কীভাবে কাজ করে এবং বিশেষত তারা ওএস / সিপিইউয়ের সাথে কীভাবে ইন্টারেক্ট করে তা আরও গভীরভাবে বোঝার চেষ্টা করছি। আমি সম্ভবত স্ট্যাক ওভারফ্লোতে এখানে প্রতিটি স্ট্যাক / হিপ সম্পর্কিত থ্রেডের প্রতিটি উত্তর পড়েছি এবং সেগুলি সব উজ্জ্বল। তবে এখনও একটি জিনিস আছে যা আমি এখনও পুরোপুরি বুঝতে পারি নি।
সিউডো কোডে এই ফাংশনটি বিবেচনা করুন যা বৈধ মরচে কোড ;-) হতে পারে
fn foo() {
let a = 1;
let b = 2;
let c = 3;
let d = 4;
// line X
doSomething(a, b);
doAnotherThing(c, d);
}
এক্স স্ট্রাইকটির মতো দেখতে এই স্ট্যাকটি আমি এইভাবে ধরেছি:
Stack
a +-------------+
| 1 |
b +-------------+
| 2 |
c +-------------+
| 3 |
d +-------------+
| 4 |
+-------------+
এখন, স্ট্যাকটি কীভাবে কাজ করে সে সম্পর্কে আমি যা কিছু পড়েছি তা হ'ল এটি লিফোর নিয়মগুলি কঠোরভাবে মান্য করে (শেষ পর্যন্ত, প্রথমে আউট)। নেট, জাভা বা অন্য কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজে স্ট্যাক ডেটাটাইপের মতো।
তবে তা যদি হয় তবে এক্স লাইনের পরে কী হবে? কারণ স্পষ্টত, পরবর্তী জিনিস আমরা প্রয়োজন সঙ্গে কাজ করার a
এবং b
কিন্তু অর্থ দাঁড়ায় এই যে যা OS / CPU- র (?) পপ আউট হয়েছে d
এবং c
প্রথম অবস্থায় ফিরিয়ে আনতে a
এবং b
। তবে তারপরে এটি নিজেই পায়ে গুলি করবে, কারণ এটির প্রয়োজন c
এবং d
পরবর্তী লাইনে।
তো, আমি আশ্চর্য হই যে পর্দার আড়ালে ঠিক কী ঘটে?
আরও একটি সম্পর্কিত প্রশ্ন। বিবেচনা করুন আমরা এর মতো অন্যান্য কার্যগুলির একটিতে একটি রেফারেন্স পাস করি:
fn foo() {
let a = 1;
let b = 2;
let c = 3;
let d = 4;
// line X
doSomething(&a, &b);
doAnotherThing(c, d);
}
আমি কীভাবে জিনিসগুলি বুঝি তার থেকে এর অর্থ হবে যে প্যারামিটারগুলি doSomething
মূলত একই মেমরি ঠিকানার মতো a
এবং b
ভিতরে ইশারা করে foo
। তবে তারপরে আবার এর অর্থ হ'ল আমাদের কাছে পৌঁছে যাওয়া a
এবং হওয়া অবধি স্ট্যাকেরb
কোনও পপ আপ নেই ।
এই দুটি ক্ষেত্রে আমাকে ভাবতে বাধ্য করে যে স্ট্যাকটি ঠিক কীভাবে কাজ করে এবং কীভাবে এটি লিফোর নিয়মকে কঠোরভাবে অনুসরণ করে আমি পুরোপুরি বুঝতে পারি নি ।
LIFO
অর্থ আপনি কেবল স্ট্যাকের শেষে উপাদানগুলি যুক্ত করতে বা সরাতে পারবেন এবং আপনি যে কোনও উপাদান সর্বদা পড়তে / পরিবর্তন করতে পারবেন।