שיעור 17: union וההבדל מ-struct
struct נותן לכל שדה זיכרון משלו — אבל ל-C יש גם תאום חסכן: union. ב-union כל השדות חולקים את אותו אזור זיכרון, ולכן רק אחד מהם 'חי' בכל רגע. union Value { int i; double d; }; תופס כגודל השדה הגדול ביותר (8 בייט בשביל double), בעוד struct מקביל תופס בערך את סכום השדות (ולעיתים יותר, בגלל ריפוד). כ
struct הוא דירה עם חדר לכל דייר; union הוא חדר אחד עם מיטה אחת — כשדייר חדש נכנס, הקודם פשוט נזרק החוצה. בכל רגע גר שם בדיוק אחד.
- union (איחוד)
- טיפוס שבו כל השדות חולקים את אותו אזור זיכרון — רק שדה אחד תקף בכל רגע.
- זיכרון משותף
- כל שדות ה-union מתחילים באותה כתובת; כתיבה לאחד דורסת את הביטים של האחרים.
- sizeof של union
- כגודל השדה הגדול ביותר. ב-struct, לעומת זאת — בערך סכום השדות, ולעיתים יותר בגלל ריפוד (padding).
- ריפוד (padding)
- בייטים ריקים שהקומפיילר מוסיף ל-struct כדי ליישר שדות בזיכרון — לכן sizeof לפעמים גדול מסכום השדות.
- תגית טיפוס (tag)
- שדה נלווה (int או enum) ששומרים ליד ה-union כדי לזכור איזה שדה תקף כרגע.