ক্লাস ২৫ - ইন্টারনাল মেমরি গভীর বিশ্লেষণ: কম্পাইলেশন ও এক্সিকিউশন পর্যায়
✨ আলোচিত বিষয়বস্তু
এই ক্লাসে একটি Go প্রোগ্রামের অভ্যন্তরীণ কার্যকলাপ নিয়ে আলোচনা করা হয়েছে, বিশেষ করে নিচের বিষয়গুলোর ওপর:
- কম্পাইলেশন পর্যায় (Compilation Phase)
- এক্সিকিউশন পর্যায় / রানটাইম (Execution Phase / Runtime)
- Go কীভাবে
go build
দিয়ে বাইনারি ফাইল তৈরি করে - সেই বাইনারি ফাইলে কী কী সংরক্ষিত হয় (ফাংশন, কনস্ট্যান্ট, গ্লোবাল ভেরিয়েবল ইত্যাদি)
- ফাংশন এক্সপ্রেশনের (যেমন,
add := func(...)
) মেমরিতে কীভাবে হ্যান্ডল করা হয়
👍 আলোচনার বিষয়বস্তু
ধারনা | ব্যাখ্যা |
---|---|
কম্পাইলেশন পর্যায় | সোর্স কোডকে বাইনারি এক্সিকিউটেবল এ পরিণত করে। এখনো কোনো কোড রান হয় না। |
এক্সিকিউশন পর্যায় | কম্পাইল হওয়া বাইনারি ফাইল রান করে, প্রথমে init() এবং তারপর main() থেকে শুরু হয়। |
কোড সেগমেন্ট | কম্পাইল হওয়া ফাংশন (main , call , anonymous add ) এবং কনস্ট্যান্ট (a ) এক্সিকিউটেবল ইন্সট্রাকশনের অংশ হিসেবে এখানে সংরক্ষিত থাকে। |
ডেটা সেগমেন্ট | গ্লোবাল ভেরিয়েবল (যেমন, p ) এখানে সংরক্ষিত হয়। |
ফাংশন এক্সপ্রেশন | রানটাইমে ফাংশন অবজেক্ট হিসেবে বিবেচিত হয় এবং কোড সেগমেন্টে সংরক্ষিত থাকে। |
📋 ক্লাস ২৫ এর কোড:
package main
import "fmt"
const a = 10 // constant
var p = 100
func call() {
add := func(x int, y int) {
z := x + y
fmt.Println(z)
}
add(5, 6)
add(p, a)
}
func main() {
call()
fmt.Println(a)
}
func init() {
fmt.Println("Hello")
}
🔄 কম্পাইলেশন পর্যায়ের ভিজ্যুয়ালাইজেশন
go build main.go
- পার্সার/কম্পাইলার: সিনট্যাক্স, স্কোপ এবং ডিপেন্ডেন্সি যাচাই করে।
- সংরক্ষণ করে:
- কনস্ট্যান্ট: a = 10
- গ্লোবাল ভেরিয়েবল: p = 100
- ফাংশন:
init
,main
,call
, এবংcall
এর ভেতরের anonymousadd
ফাংশন - প্রয়োজনীয় মেশিন কোড + মেটাডাটার
বাইনারি
জেনারেট করে
বাইনারি ফাইলে থাকে:
- কোড সেগমেন্ট: কনস্ট্যান্ট
a
,main
,call
, anonymous ফাংশন - ডেটা সেগমেন্ট: ভ্যারিয়েবল
p
- এখানে কোনো এক্সিকিউশন হয় না।
⏱ এক্সিকিউশন পর্যায়ের ভিজ্যুয়ালাইজেশন
১. init() => "Hello"
২. main() => call() ফাংশনকে কল করে
৩. call() => add() ফাংশনকে ডিক্লেয়ার এবং কল করে
- add(5, 6) => 11
- add(100, 10) => 110
৪. fmt.Println(a) => 10
🧠 মেমরি লেআউট
┌─────────────────────────────┐
│ Code Segment │
│-----------------------------│
│ const a = 10 |
| main, call, init, add-func │
└─────────────────────────────┘
↓
┌─────────────────────────────┐
│ Data Segment │
│-----------------------------│
│ var p = 100 │
└─────────────────────────────┘
↓
┌─────────────────────────────┐
│ Stack │
│-----------------------------│
│ call() frame → add func │
│ x=5,y=6,z=11 │
│ x=100,y=10,z=110 │
└─────────────────────────────┘
🔹সারাংশ
- একটি Go প্রোগ্রাম দুইটি পর্যায়ে রান হয়: কম্পাইলেশন এবং এক্সিকিউশন।
- কম্পাইলেশন চলাকালে, Go মেমরি লেআউট প্রস্তুত করে, ফাংশন এবং এক্সপ্রেশন কম্পাইল করে।
- এক্সিকিউশন পর্যায়ে, প্রথমে
init()
এবং তারপরmain()
রান হয়। - ফাংশন এক্সপ্রেশন (যেমন,
add := func(...)
) হলোফার্স্ট ক্লাস ভ্যালু
, যা কোড সেগমেন্টে সংরক্ষিত থাকে। go build
থেকে তৈরি হওয়া বাইনারি ফাইলে কোড, ডেটা, এবং মেটাডাটা সহ প্রয়োজনীয় সবকিছু থাকে।
[Author: @ifrunruhin12, @nazma98 Date: 2025-05-01 - 2025-05-14 Category: interview-qa/class-wise ]