কম্পিউটার

C/C++-এ প্রতিটি সদস্যের সাইজের সমষ্টির সমান একটি স্ট্রাকটের সাইজফ কেন নয়?


একটি স্ট্রাকটের সাইজফ এবং সেই স্ট্রাকটের প্রতিটি সদস্যের সাইজফের যোগফলের মধ্যে পার্থক্য বাইট প্যাডিং এবং সারিবদ্ধকরণের কারণে। C/C++-এ প্রতিটি ডেটা টাইপের একটি সারিবদ্ধকরণের প্রয়োজনীয়তা রয়েছে। একটি প্রসেসর এর আর্কিটেকচারের প্রসেসিং শব্দের দৈর্ঘ্য থাকবে। একটি 32 বিট মেশিনে, প্রক্রিয়াকরণ শব্দের আকার হবে 4 বাইট বা 32 বিট। উদাহরণস্বরূপ, যদি আপনার struct-

থাকে

উদাহরণ

#include <iostream>
using namespace std;
struct X
{
   char b[3];
   int c;
};
int main()
{
   char b[3];
   int c;
   int total = sizeof(b) + sizeof(c);
   cout << sizeof(X) << endl;
   cout << total;
}

আউটপুট

এটি আউটপুট দেয় −

8
7

আমার 64 বিট মেশিনে। কেন? এর কারণ স্ট্রাকটে, এটি গৃহস্থালির অ্যারে নেয় এবং এটি মেমরিতে রাখে কিন্তু এখন যদি এটি int রাখে যার আকার এটির পাশে 4 বাইট, সারিবদ্ধকরণের নিয়মগুলি ভঙ্গ হয়। তাই b এর শেষে অতিরিক্ত বাইটটি এড়িয়ে যায় এবং c 4 বাইট সীমানা থেকে শুরু হয়। এটি অতিরিক্ত আকারের কারণ।

আপনি https://en.wikipedia.org/wiki/-এ এই নিয়মগুলি সম্পর্কে আরও পড়তে পারেন ডেটা_স্ট্রাকচার_এলাইনমেন্ট।


  1. n-তম ফিবোনাচি সংখ্যার জন্য C/C++ প্রোগ্রাম?

  2. ত্রিভুজাকার ম্যাচস্টিক নম্বরের জন্য C/C++ প্রোগ্রাম?

  3. লিনাক্সে c++ এর জন্য শীর্ষ IDE কি?

  4. উইন্ডোতে c++ এর জন্য শীর্ষ IDE কি?