5.1.32 · D3 · HinglishC Programming

Worked examplesrestrict keyword — aliasing hint

3,867 words18 min read↑ Read in English

5.1.32 · D3 · Coding › C Programming › restrict keyword — aliasing hint

Yeh page exhaustive drill hai. Pehle hum ek matrix banate hain jisme C mein aane wale har tarah ke overlap situations hain; phir har cell ke liye ek example solve karte hain.

Theory ke liye parent note dekho: restrict — aliasing hint.


Do words jo pehle clearly samajhne zaroori hain

Kisi bhi example se pehle, do terms aur ek abbreviation — kyunki poori page inhe alag rakhne par tikhi hai.


Ek aur idea: scalar vs. vectorized ("SIMD") builds

Neeche kuch examples mein kaha gaya hai ki result "ek scalar build aur ek vectorized build ke beech alag hota hai." In do words ko use karne se pehle inhe samjhte hain.

Jab bhi koi example dikhata hai "scalar X deta hai, vectorized Y deta hai, aur X ≠ Y", woh disagreement hi undefined behaviour ka proof hai.


The scenario matrix

Ab picture. Do arrays memory ki ek flat strip mein rehti hain. Har pointer ek start address aur (kitne elements touch karte ho uske through) bytes ki ek range name karta hai.

Figure — restrict keyword — aliasing hint

Figure s01 (described). Aath numbered memory cells (indices 0–7) ki ek horizontal strip. Neeche ek black arrow cells 2–5 span karta hai jis par "pointer p range" likha hai; upar ek black arrow cells 0–3 span karta hai jis par "pointer q range" likha hai. Do cells jo dono cover karte hain (2 aur 3) red mein outlined hain aur "shared bytes (danger zone)" label kiya gaya hai. Red outline hi overlap hai.

Agar red zone empty hai, promise rakha ja sakta hai. Agar usme ek bhi byte hai, promise toot jaata hai jis moment dono pointers usse touch karte hain.

Yeh har case-class hai jo yeh topic aap par throw kar sakti hai:

Cell Situation Regions overlap karti hain? restrict legal hai?
A Do alag arrays, different objects Nahi ✅ Haan
B Forward-shifted copy dst = src+k, k>0 Haan (partial) ❌ Nahi
C Backward-shifted copy dst = src-k, k>0 Haan (partial) ❌ Nahi
D Exact same pointer dst == src, n>0 Fully (ek self-alias) ❌ Nahi
E Adjacent, touching but not overlapping (dst = src+n) Nahi (edge case!) ✅ Haan
F Scalar pointer possibly inside an array (factor in v) Depends karta hai ✅ Sirf agar bahar ho
G Zero-length / degenerate (n = 0) Vacuously none ✅ Haan (koi access nahi)
H Real-world word problem (image row blur) Check karna padega depends
I Exam twist: const + restrict alias, overlap sirf -O3 par visible Haan (full) ❌ Nahi

Ab hum har cell, table order A → I mein walk karenge — har ek worked example.


Do functions jo neeche use hote hain

Examples 1–4 do tiny functions call karte hain. Yahan unke signatures hain taaki kuch undefined use na ho:


Worked examples










Matrix ka recap

Recall

Har cell, ek line mein. Cell A (do arrays) legal? ::: Haan — disjoint, deterministic, vectorizable. Cell B (dst=src+1) legal? ::: Nahi — partial overlap [1,4), UB. Cell C (dst=src-1) legal? ::: Nahi — phir bhi overlaps karta hai; ek "sahi lagta" scalar result luck hai. Cell D (dst==src, n>0) legal? ::: Nahi — full self-alias; do restrict params same bytes name karte hain ⇒ UB, bhaale values unchanged aa jaayein. Cell E (dst=src+n) legal? ::: Haan — adjacent, koi shared byte nahi (src_end ≤ dst_start, non-strict). Cell F (scalar array ke andar) legal? ::: Sirf tab agar scalar array ke bahar ho. Cell G (n=0) legal? ::: Haan — zero accesses promise violate nahi kar sakti, chahe dstsrc ho. Cell H (in-place blur, outin) legal? ::: Nahi — full overlap; alag output buffer use karo. Cell I (const+restrict alias) legal? ::: Nahi — const aliasing nahi rokta; -O0 aur -O3 disagree karte hain ⇒ UB.


Connections

  • Pointers in C
  • Pointer aliasing
  • const qualifier
  • memcpy vs memmove
  • Compiler optimization & vectorization (SIMD)
  • Undefined behaviour in C
  • C99 standard features