|
31 | 31 | | ২৫ | [Difference between expression and statement](#২৫-difference-between-expression-and-statement) | [উদাহরণ](#উদাহরণ-18), [পার্থক্য সংক্ষেপে](#পার্থক্য-সংক্ষেপে) | |
32 | 32 | | ২৬ | [What is pointer? And difference between pass by value vs pass by reference](#২৬-what-is-pointer-and-difference-between-pass-by-value-vs-pass-by-reference) | [উদাহরণ](#উদাহরণ-19) | |
33 | 33 | | ২৭ | [Difference between pass by value vs pass by reference](#২৭-difference-between-pass-by-value-vs-pass-by-reference) | [উদাহরণ](#উদাহরণ-20), [উদাহরণ](#উদাহরণ-21), [পার্থক্য সংক্ষেপে](#পার্থক্য-সংক্ষেপে-1) | |
| 34 | +| ২৮ | [Describe internal memory of a Go program](#২৮-describe-internal-memory-of-a-go-program) | [উদাহরণ](#উদাহরণ-22), [উদাহরণ](#উদাহরণ-23) | |
| 35 | + |
34 | 36 |
|
35 | 37 | ## ১। What is scope? |
36 | 38 |
|
@@ -749,4 +751,46 @@ func main() { |
749 | 751 |
|
750 | 752 | --- |
751 | 753 |
|
| 754 | +### ২৮। Describe internal memory of a Go program |
| 755 | +
|
| 756 | +Go প্রোগ্রাম রান হইলে প্রথমেই র্যামের কিছু অংশ অর্থাৎ মেমোরি ব্লক দখল করে ফেলে, প্রথম যে অংশ দখল করে সেটা Code Segment তারপর যে অংশ দখল করে সেটা Data segment এরপর Stack ও Heap নামে আরো ২ টা অংশ দখল করে। |
| 757 | +
|
| 758 | +**বিঃদ্রঃ Go প্রোগ্রাম রান হওয়ার জন্য অবশ্যই একটা মেইন ফাংশন থাকতে হবে।** |
| 759 | +
|
| 760 | +**Code Segemnt:** প্রোগ্রামে যত ফাংশন আছে সব ফাংশন চলে যায় কোড সেগমেন্টের মধ্যে অর্থাৎ ফাংশন ডেফিনিশন বা রিড অনলি ডাটাগুলি এই সেগমেন্টে স্টোর হয়। |
| 761 | +
|
| 762 | +**Data Segment:** প্রোগ্রামে যত গ্লোবাল ভেরিয়েবল আছে সব জমা হবে ডাটা সেগমেন্টের ভিতরে। ডাটা সেগমেন্ট মানেই গ্লোবাল মেমোরি, এই গ্লোবাল মেমোরিতে যেকোনো ফাংশন হচ্ছে যদি তার মধ্যে না থাকে সে, কোথায় খুঁজবে ? সে দেখবে ডাটা সেগমেন্টে আছে কিনা অর্থাৎ গ্লোবাল মেমোরিতে আছে কিনা। |
| 763 | +
|
| 764 | +**Stack:** Local Variables এবং ফাংশন কল স্ট্যাক মেমরিতে সংরক্ষিত হয় অর্থাৎ Code Segment এ থাকা ফাংশন যখন ইনবুক (invoke) হয় তখন ফাংশন কলের জন্য stack এ যে মেমরি অ্যালোকেট হয় তাকে বলা হয় StackFrame। এভাবে প্রতিটা ফাংশন এক্সিকিউশন শেষে StackFrame পপ আউট হয়ে যায়। এটি Last-In-First-Out (LIFO) পদ্ধতিতে কাজ করে। |
| 765 | +
|
| 766 | +#### উদাহরণ |
| 767 | +
|
| 768 | +```go |
| 769 | + |
| 770 | +func calculate() int { |
| 771 | + x := 10 // `x` স্ট্যাক মেমরিতে অ্যালোকেট হয় |
| 772 | + y := 20 |
| 773 | + return x + y |
| 774 | +} |
| 775 | +``` |
| 776 | +
|
| 777 | +**Heap:** হিপ হলো মেমরির আরেকটি অংশ যেখানে দীর্ঘস্থায়ী ডেটা সংরক্ষণ করা হয়। ডায়নামিক অবজেক্ট যেমন গো'র স্ট্রাকচার, স্লাইস, ম্যাপ,পয়েন্টার, চ্যানেল ইত্যাদি হিপ মেমোরিতে সংরক্ষিত হয়। হিপ মেমোরি অনেক বড় এবং গার্বেজ কালেক্টর (Garbage Collector) এর দ্বারা পরিচালিত হয়। |
| 778 | +
|
| 779 | +#### উদাহরণ |
| 780 | +
|
| 781 | +```go |
| 782 | + |
| 783 | +func createUser() *User { |
| 784 | + user := &User{Name: "John"} // `user` হিপে অ্যালোকেট হয় (কারণ পয়েন্টার রিটার্ন করা হচ্ছে) |
| 785 | + return user |
| 786 | +} |
| 787 | +``` |
| 788 | +
|
| 789 | +**Garbage Collector:** এটি পর্যায়ক্রমে হিপ থেকে অব্যবহৃত ডেটা বা অবজেক্ট সরিয়ে দেয়, যাতে মেমরি লিক না হয় এবং মেমরি দক্ষতার সাথে ব্যবহার হয়। |
| 790 | +
|
| 791 | +***বিঃদ্রঃ Go কম্পাইলার এস্কেপ অ্যানালিসিস করে ডিসাইড করে কোন ভেরিয়েবল স্ট্যাক নাকি হিপ এ অ্যালোকেট হবে।*** |
| 792 | +
|
| 793 | +--- |
| 794 | +
|
| 795 | +
|
752 | 796 | এই ডকুমেন্টের মাধ্যমে আপনি Go প্রোগ্রামিং ভাষার গুরুত্বপূর্ণ প্রশ্নোত্তর সম্পর্কে জানতে পারবেন, যা আপনার ইন্টারভিউ প্রস্তুতিতে সহায়ক হবে। |
0 commit comments