#pragma pack
সংকলককে নির্দিষ্ট প্রান্তিককরণের সাথে কাঠামোর সদস্যদের প্যাক করার নির্দেশ দেয়। বেশিরভাগ সংকলক, যখন আপনি কোনও স্ট্রাক্ট ঘোষণা করেন, সদস্যদের মধ্যে প্যাডিং সন্নিবেশ করানো হবে তা নিশ্চিত করার জন্য যে তারা মেমরির উপযুক্ত ঠিকানার (সাধারণত টাইপের আকারের একাধিক) সাথে সংযুক্ত রয়েছে। এটি ভেরিয়েবলগুলি অ্যাক্সেসের সাথে যুক্ত কিছু আর্কিটেকচারের পারফরম্যান্স পেনাল্টি (বা সরাসরি ত্রুটি) এড়িয়ে চলে যা সঠিকভাবে প্রান্তিক না হয়। উদাহরণস্বরূপ, প্রদত্ত 4-বাইট পূর্ণসংখ্যা এবং নিম্নলিখিত কাঠামো:
struct Test
{
char AA;
int BB;
char CC;
};
সংকলক স্ট্রাক্টটিকে মেমোরিতে রেখে দিতে পছন্দ করতে পারে:
| 1 | 2 | 3 | 4 |
| AA(1) | pad.................. |
| BB(1) | BB(2) | BB(3) | BB(4) |
| CC(1) | pad.................. |
এবং sizeof(Test)
4 × 3 = 12 হবে, যদিও এটি শুধুমাত্র তথ্য 6 বাইট ধারণ করে। #pragma
(আমার জ্ঞানের কাছে) সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রে হ'ল হার্ডওয়্যার ডিভাইসগুলির সাথে কাজ করার সময় যেখানে আপনাকে নিশ্চিত করতে হবে যে কম্পাইলার ডেটাতে প্যাডিং প্রবেশ করায় না এবং প্রতিটি সদস্য পূর্ববর্তীটিকে অনুসরণ করে। এর সাথে #pragma pack(1)
উপরের স্ট্রাক্টটি এভাবে ছড়িয়ে দেওয়া হবে:
| 1 |
| AA(1) |
| BB(1) |
| BB(2) |
| BB(3) |
| BB(4) |
| CC(1) |
এবং sizeof(Test)
1 × 6 = 6 হবে।
এর সাথে #pragma pack(2)
উপরের স্ট্রাক্টটি এভাবে ছড়িয়ে দেওয়া হবে:
| 1 | 2 |
| AA(1) | pad.. |
| BB(1) | BB(2) |
| BB(3) | BB(4) |
| CC(1) | pad.. |
এবং sizeof(Test)
2 × 4 = 8 হবে।
কাঠামোতে ভেরিয়েবলের ক্রমও গুরুত্বপূর্ণ। ভেরিয়েবলগুলি নীচের মতো অর্ডার করা হয়েছে:
struct Test
{
char AA;
char CC;
int BB;
};
এবং এর সাথে #pragma pack(2)
স্ট্রাক্টটি এভাবে ছড়িয়ে দেওয়া হবে:
| 1 | 2 |
| AA(1) | CC(1) |
| BB(1) | BB(2) |
| BB(3) | BB(4) |
এবং sizeOf(Test)
3 × 2 = 6 হবে।
#pragma
নির্দেশাবলীর মতো তারা বাস্তবায়িত হয় সংজ্ঞায়িত।