Ayşegül
Ayşegül
خواندن ۱ دقیقه·۵ سال پیش

Structure padding

شاید خیلی‌ از دوستان به‌صورت سرسری از این موضوع گذشته‌باشند، و یا شایدم اصلاً اطلاعی درموردش نداشته‌باشند.

این Struct رو در نظر داشته‌باشید :

struct foo{ char ch; int in; };

مسلماً در نظر دارید که الآن متغیر char به اندازه یک‌بایت، و متغیر int به اندازه چهار‌بایت باید و نهایت پنج بایت باید فضا اشغال کند. خب بیاید یک تست بکنیم ببینم آیا واقعاً درست است ؟

#include <stdio.h> int main (){ printf("%ld\n", sizeof(struct foo)); return 0; }

و درنهایت :

$ gcc-9 struct.c -o out ; ./out $ 8

خب ! ما انتظار ۵ بایت داشتیم، ولی چرا شد ۸ ؟. این اتفاق برای دسترسی سریع‌تر به مقادیر در حافظه می‌افته و بش Structure Padding گفته می‌شود. بدین‌صورت که اندازه نوع‌ `int` چهاربایت هست و اندازه نوع `char` یک‌بایت. کامپایلر یک چهاربایتی برای `int` در نظر می‌گیرد و یک‌چهاربایتی نیز برای `char` به این کد توجه کنید :

#include <stdio.h> struct foo{ char ch; char ch2; char ch3; char ch4; int in; }; int main (){ printf("%ld\n", sizeof(struct foo)); return 0; }

و حالا بیاید خروجی رو ببینیم :

$ gcc-9 struct.c -o out ; ./out $ 8

:) و همینطوری که گفتیم، کامپایلر برای نوع `char` هم درحالی که یک‌بایت نیاز داره، چهاربایت می‌گیره.

اگر به دنبال کردن این داستان علاقه دارید، پیشنهاد می‌کنم که این مقاله آقای‌اریک‌ریموند رو بخونید.

structcstructer paddingprogramming
destroyer from onja | @null_terminator_sc -> telegram-desktop :)
شاید از این پست‌ها خوشتان بیاید