Array হলো একটি ডাটা স্ট্রাকচার, যা প্রোগ্রামিং ল্যাঙ্গুয়েজে একই ধরনের একাধিক ডাটা একসঙ্গে সংরক্ষণ করতে ব্যবহৃত হয়। মেশিনের দৃষ্টিকোণ থেকে array কিভাবে কাজ করে তা বোঝা অনেক গুরুত্বপূর্ণ, কারণ array খুব efficient ভাবে মেমরি ব্যবহার করে এবং দ্রুত data access করতে সাহায্য করে।
Array হলো একটি collection, যেখানে একই ধরনের multiple values sequentially সংরক্ষণ করা হয়। প্রতিটি value একটি নির্দিষ্ট index এর মাধ্যমে access করা যায়। Array-এর একটি বড় সুবিধা হলো, এটি constant time, অর্থাৎ O(1) সময়ে values access করতে দেয়, যা অন্যান্য ডাটা স্ট্রাকচার থেকে অনেক দ্রুত।
যখন আপনি একটি array declare করেন, মেশিন সেই array এর জন্য একটি নির্দিষ্ট পরিমাণ মেমরি allocate করে। উদাহরণস্বরূপ, একটি int
টাইপ array যেখানে 5টি elements আছে, সেটি sequential ভাবে 4 bytes করে 5টি element মেমরিতে store করবে। যদি প্রথম element মেমরি address 1000 এ থাকে, তাহলে বাকি element গুলো sequential ভাবে 1004, 1008, 1012, ইত্যাদি address এ থাকবে।
int arr[5]; // 5টি integer এর জন্য মেমরি allocate হবে
Array তে প্রতিটি element এর একটি index থাকে, যা array এর address এর সাথে element এর size যোগ করে সেই element এর সঠিক address বের করতে সাহায্য করে। এজন্য array তে কোন element access করতে O(1) সময় লাগে। একটি নির্দিষ্ট element এর address পেতে এই ফর্মুলা ব্যবহার করা হয়:
Address of arr[i] = Base address + (i * size_of_element)
int arr[3] = {10, 20, 30};
printf("%d", arr[1]); // Output: 20
একটি array এর size সাধারণত fixed হয়, অর্থাৎ এটি declare করার পর array এর size পরিবর্তন করা যায় না। মেশিনে মেমরি allocation fixed এবং contiguous হয়। আপনি যদি মেমরিতে বেশি জায়গা বরাদ্দ করতে চান, তাহলে একটি নতুন array তৈরি করতে হবে এবং পুরনো array এর ডেটা সেখানে কপি করতে হবে।
যখন প্রোগ্রাম কম্পাইল হয়, তখন compiler array এর জন্য মেশিনে memory address এবং array এর size ইত্যাদি সেট করে। উদাহরণস্বরূপ, যদি আমরা একটি array ডিক্লেয়ার করি, compiler তা sequential ভাবে মেমরিতে রাখবে। পরে যখন array থেকে কোনো value access করা হবে, মেশিন সেই memory address এর মাধ্যমে value access করবে।
int arr[5] = {1, 2, 3, 4, 5};
MOV arr[2], EAX; // মেশিন লেভেলে arr[2] কে মেমরি থেকে EAX রেজিস্টারে নিয়ে আসছে
কিছু আধুনিক প্রোগ্রামিং ল্যাঙ্গুয়েজ, যেমন Python এবং JavaScript, dynamic arrays ব্যবহার করে, যেগুলো runtime এ size পরিবর্তন করতে পারে। এই ধরনের arrays নতুন element যোগ করার সময় মেমরিতে নতুন block allocate করে এবং পুরনো data সেখানে কপি করে।
Array sequential ভাবে মেমরিতে store হয় বলে, এটি cache memory এর সাথে বেশ কার্যকর ভাবে কাজ করে। যখন মেশিন একাধিক array elements access করে, তখন cache memory sequential memory block নিয়ে কাজ করে, যা access time কমিয়ে দেয় এবং performance বাড়ায়।
উত্তর: হ্যাঁ, array declare করার সাথে সাথেই মেশিন নির্দিষ্ট মেমরি allocate করে। আপনি value assign না করলেও, array এর প্রতিটি element এর জন্য মেমরি block বরাদ্দ হয়ে যায়। তবে, uninitialized array এর জন্য ডিফল্ট মান নির্ভর করে ল্যাঙ্গুয়েজের ওপর। কিছু ল্যাঙ্গুয়েজে ডিফল্ট মান 0
থাকে, আবার কিছুতে তা garbage value হয়।
উত্তর: বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজে array এর size compile-time এ নির্ধারিত হয় এবং runtime এ পরিবর্তন করা যায় না। তবে Python বা JavaScript এর মত ল্যাঙ্গুয়েজে dynamic arrays থাকে, যেগুলো runtime এ size পরিবর্তন করতে পারে।
উত্তর: Array sequential মেমরি ব্যবহার করে এবং constant time এ element access করতে পারে। কিন্তু Linked List random memory locations এ element store করে এবং sequential ভাবে traverse করে element access করতে হয়, যা O(n) সময় নেয়।
উত্তর: মেমরি efficiency এর জন্য array বেশ কার্যকর, কারণ এটি contiguous মেমরি block ব্যবহার করে এবং অতিরিক্ত memory pointers এর প্রয়োজন হয় না, যা linked list এ দেখা যায়।
Array প্রোগ্রামিং ল্যাঙ্গুয়েজে একটি অত্যন্ত গুরুত্বপূর্ণ data structure, যা মেমরি management এবং data access এর efficiency বাড়ায়। মেশিনে array sequential মেমরি allocation এর কারণে এটি দ্রুত কাজ করতে পারে এবং নির্দিষ্ট element access করতে পারে constant সময়ে।
আশা করি, array এর মেশিন লেভেল কাজ এবং এর বিভিন্ন বৈশিষ্ট্য সম্পর্কে পরিষ্কার ধারণা পেয়েছেন!
Additional Resources:
27 views
Please Login to comment
আমি বুঝিনি
না বোঝার কি আছে 🤔