সি প্রোগ্রামের মেমোরি লেআউট নিচের মত। এতে কিছু লেভেল রয়েছে:
- স্ট্যাক সেগমেন্ট (Stack Segment)
- হিপ সেগমেন্ট (Heap Segment)
- টেক্সট সেগমেন্ট (Text Segment)
- ডেটা সেগমেন্ট (Data Segment)

এখন দেখি এই সেকশনগুলোর কার্যকারিতা কী।
| ক্রমিক নং | সেকশন ও বর্ণনা |
|---|---|
| 1 | স্ট্যাক (Stack) প্রসেস স্ট্যাকে অস্থায়ী ডেটা থাকে যেমন মেথড/ফাংশন প্যারামিটার, রিটার্ন অ্যাড্রেস এবং লোকাল ভেরিয়েবল। এটি অটোমেটিক ভেরিয়েবল ও ফাংশন প্যারামিটারের জন্য মেমোরি এলোকেটেড এলাকা। ফাংশন কল সময় রিটার্ন অ্যাড্রেসও এখানে স্টোর হয়। স্ট্যাক LIFO (Last-In-First-Out) মেকানিজম ব্যবহার করে। এই সেগমেন্টের সাইজ লোকাল ভেরিয়েবল, ফাংশন প্যারামিটার, ফাংশন কল অনুযায়ী ভেরিয়েবল। এটি হাইয়ার অ্যাড্রেস থেকে লোয়ার অ্যাড্রেস দিকে বড়ে। |
| 2 | হিপ (Heap) এটি রানটাইমে প্রসেসের জন্য ডাইনামিক্যালি অ্যালোকেটেড মেমোরি। এটি malloc() ও calloc() কলের জন্য ডাইনামিক মেমোরি স্টোরেজের এলাকা। এই সেগমেন্টের সাইজও ইউজার অ্যালোকেশন অনুযায়ী ভেরিয়েবল। এটি লোয়ার অ্যাড্রেস থেকে হাইয়ার অ্যাড্রেস দিকে বড়ে। আসুন দেখি কীভাবে সেগমেন্ট (ডেটা ও bss) সাইজ কিছু স্যাম্পল প্রোগ্রামের সাথে পরিবর্তিত হয়। সেগমেন্ট সাইজ জানার জন্য "size" কমান্ড এক্সিকিউট করুন। |
| 3 | টেক্সট (Text) এতে প্রোগ্রাম কাউন্টারের ভ্যালু এবং প্রসেসরের রেজিস্টারদের কন্টেন্টস দ্বারা বর্তমান এক্টিভিটি রিপ্রেজেন্ট করা হয়। এটি .text সেকশন দ্বারা রিপ্রেজেন্টেড। এটি মেমোরিতে ইনস্ট্রাকশন কোড স্টোর করার এলাকা ডিফাইন করে। এটি একটি ফিক্সড এলাকা। |
| 4 | ডেটা (Data) এই সেকশনে গ্লোবাল ও স্ট্যাটিক ভেরিয়েবল থাকে। এটি .data সেকশন এবং .bss দ্বারা রিপ্রেজেন্টেড। .data সেকশন প্রোগ্রামের জন্য ডেটা এলিমেন্ট স্টোর করার মেমোরি রিজন ডিক্লেয়ার করতে ব্যবহৃত হয়। ডেটা এলিমেন্ট ডিক্লেয়ার হওয়ার পর এই সেকশন এক্সপ্যান্ড করা যায় না এবং প্রোগ্রাম 내내 স্ট্যাটিক থাকে। .bss সেকশনও একটি স্ট্যাটিক মেমোরি সেকশন যা প্রোগ্রামে পরে ডিক্লেয়ার হওয়া ডেটার জন্য বাফার ধারণ করে। এই বাফার মেমোরি জিরো-ফিল্ড। |
ডেটা সেগমেন্ট আরও দুভাগে ভাগ করা যায়।
| ক্রমিক নং | সেকশন ও বর্ণনা |
|---|---|
| 1 | ইনিশিয়ালাইজড ডেটা সেগমেন্ট (Initialized Data Segment) এটি অবজেক্ট ফাইল বা প্রোগ্রামের ভার্চুয়াল অ্যাড্রেস স্পেসের একটি অংশ যা অনইনিশিয়ালাইজড স্ট্যাটিক ও গ্লোবাল ভেরিয়েবল নিয়ে গঠিত। অন-ইনিশিয়ালাইজড ডেটা সেগমেন্টকে BSS (Block Started by Symbol) সেগমেন্টও বলা হয়। |
| 2 | অন-ইনিশিয়ালাইজড ডেটা সেগমেন্ট (Un-initialized Data Segment) এটি রিড-রাইট, কারণ ভেরিয়েবলগুলোর মান রানটাইমে পরিবর্তন হতে পারে। এই সেগমেন্টও ফিক্সড সাইজের। |