5.1.24 · HinglishC Programming

Unions — overlapping memory

1,382 words6 min readRead in English

5.1.24 · Coding › C Programming


WHAT is a union?

union Data {
    int   i;     // 4 bytes
    float f;     // 4 bytes
    char  c[4];  // 4 bytes
};

Struct ke saath contrast karo:

Feature struct union
Memory sum of all members (+padding) size of largest member
Members live all simultaneously only one at a time
Use case bundle related data save space / reinterpret bytes

WHY is its size the largest member?


Figure — Unions — overlapping memory

HOW bytes overlap hote hain (key picture)


Ek practical use: tagged union (safe pattern)

struct Variant {
    enum { INT, FLOAT, STR } tag;   // kamre mein ab kaun rehta hai?
    union { int i; float f; char *s; } val;
};

KYUN: union ke andar koi runtime flag nahi hota jo bataye ki active member kaun sa hai. Tag tumhari bookkeeping hai taaki tum sirf wahi padho jo tumne last mein likha tha.



Recall Feynman: 12-saal ke bacche ko samjhao

Ek whiteboard imagine karo. Tum uspar ek number likh sakte ho, YA ek word, YA ek drawing — lekin sirf ek cheez fit hoti hai kyunki yeh usi board hai. Agar tum apne number ke upar word likhte ho, number chala jaata hai. Union woh single whiteboard hai jo alag-alag tarah ki "writing" share karti hai. Struct, iske ulta, ek notebook hai jisme har cheez ke liye alag page hai. Board exactly utna bada hota hai jitna sabse badi cheez hogi jo tum likh sakte ho.


Flashcards

Union ke members ki defining property kya hai?
Woh sab same memory share karte hain (offset 0 se shuru hote hain), isliye ek waqt mein sirf ek valid hota hai.
Union ka size kaise determine hota hai?
Yeh uske largest member ke size ke barabar hota hai, alignment satisfy karne ke liye round up hoke.
Struct mein size kaise determine hota hai vs union mein?
struct = sum of members (+padding); union = size of largest member (+padding).
Jab tum ek union member likhte ho toh doosre members ka kya hota hai?
Unke bytes overwrite/reinterpret ho jaate hain — unhe ab padhne par meaningless data milta hai.
Kya alag union member padhna type conversion karta hai?
Nahi — yeh raw bit pattern ko reinterpret karta hai (type punning), arithmetic conversion nahi.
Tagged union kya hota hai aur kyun zaroori hai?
Ek struct jo union ke saath ek enum tag hold karta hai jo active member record karta hai, kyunki union khud yaad nahi rakhta ki kaun sa member live hai.
union { char c; int i; double d; } ke liye sizeof kya hai?
8 (sabse bade member, double, ka size, jo pehle se 8-aligned hai).
Little-endian par u.i = 65 ke saath, u.c[0] kya dega?
'A' (0x41), 65 ka lowest-order byte.

Connections

  • Structs — separate memory for each member
  • Memory alignment and padding
  • Endianness — byte order
  • Type punning and bit-level reinterpretation
  • Enums (tagged unions mein tag ke liye use hote hain)
  • sizeof operator

Concept Map

members at

so size is

adjusted by

means

leads to

enables

depends on

goal

contrasted with

size = sum of members

union type

shared memory offset 0

size = largest member

align rounds up size

only one member at a time

writing overwrites others

type punning

little-endian byte order

saves memory

struct: separate memory