5.1.32 · HinglishC Programming
restrict keyword — aliasing hint
5.1.32· Coding › C Programming
WHAT is restrict?
- Aliasing = do alag pointers ek hi memory ko refer karte hain (overlap karte hain).
restrictek anti-aliasing hint hai: yeh assert karta hai ki us pointer ke through koi aliasing nahi hai.- Promise todna → undefined behaviour. Compiler aap par blindly trust karta hai.
WHY does it exist?
Derivation-from-scratch: cost kahan se aata hai
Socho:
void add(int *a, int *b, int *c, int n) {
for (int i = 0; i < n; i++)
a[i] = b[i] + c[i];
}Compiler nahi jaanta ki a, b ya c ko overlap karta hai ya nahi. Agar a == b+1 ho, to a[i] mein likhne se b[i+1] badal jaata hai. To compiler majboor hai:
b[i]load karoc[i]load karoa[i]mein store karo …strictly usi order mein, har iteration, koi vectorization nahi, kyunki ek store future load ko invalidate kar sakta hai.
Ab inhe mark karo:
void add(int * restrict a, const int * restrict b,
const int * restrict c, int n) {
for (int i = 0; i < n; i++)
a[i] = b[i] + c[i];
}Tumne promise kiya ki a, b, c overlap nahi karte. Ab compiler:
baurcka ek block prefetch kar sakta hai,- kai sums ek saath compute kar sakta hai (SIMD),
aka block store kar sakta hai — order ab matter nahi karta.

HOW to use it
Common mistakes (Steel-man)
Recall Feynman: 12-saal ke bachche ko samjhao
Do robots hain, dono ko numbers likhne ki list di gayi hai. Agar tum unhe batao ki "tumhare dono notebooks bilkul alag hain," woh bina ek doosre ko check kiye super fast likh sakte hain. Lekin agar tum chupke se unhe ek hi notebook do aur claim karo ki woh alag hain, woh ek doosre ke upar scribble karte hain aur tumhe garbage milta hai. restrict matlab tum robots se promise kar rahe ho ki unki notebooks alag hain — aur agar tum jhooth bolte ho, result bakwaas hoga.
Active recall
Recall Quick self-test
restrictkis category ka token hai? (qualifier? keyword?)- Kya compiler tumhara restrict promise verify karta hai?
- Kya hota hai agar do
restrictpointers actually overlap karein? - Kaun sa standard function restrict-like semantics rely karta hai:
memcpyyamemmove?
C mein restrict kis tarah ka token hai?
Ek type qualifier (C99) jo pointers pe lagaya jaata hai, jaise
const ek qualifier hai.T * restrict p kya promise karta hai?
Ki p ki lifetime mein, pointed-to object sirf p ke through (ya p se derived pointers ke through) access hota hai — yaani koi aliasing nahi.
Kya compiler restrict promise verify karta hai?
Nahi. Woh trust karta hai; ise todna undefined behaviour hai.
Restrict faster code kyun enable karta hai?
Yeh compiler ki worst-case assumption hata deta hai ki pointers alias kar sakte hain, jisse reordering, values ko registers mein cache karna, aur vectorization possible hoti hai.
Kya hota hai agar do restrict pointers actually overlap karein?
Undefined behaviour — results galat ho sakte hain, aksar sirf higher optimization levels pe.
Kya restrict modifiability ke baare mein hai?
Nahi, woh
const ka kaam hai. Restrict purely ek aliasing (non-overlap) hint hai.Kaun sa function restrict-style 'no overlap' semantics rakhta hai, memcpy ya memmove?
memcpy (overlap UB hai); memmove explicitly overlap allow karta hai.
for(i) v[i]*=*factor; mein factor ko restrict kyun mark karein?
Taaki compiler jaane ki factor v ke andar point nahi karta, aur woh *factor ko ek baar register mein load kar sake, har iteration mein dobara padhne ke bajaye.
R.E.S.T. mnemonic ka kya matlab hai?
Regions Entirely Separate, Trust me.
Connections
- Pointers in C
- const qualifier
- Pointer aliasing
- memcpy vs memmove
- Compiler optimization & vectorization (SIMD)
- Undefined behaviour in C
- C99 standard features