5.1.32 · HinglishC Programming

restrict keyword — aliasing hint

1,546 words7 min readRead in English

5.1.32 · Coding › C Programming


WHAT is restrict?

  • Aliasing = do alag pointers ek hi memory ko refer karte hain (overlap karte hain).
  • restrict ek 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:

  1. b[i] load karo
  2. c[i] load karo
  3. a[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:

  • b aur c ka ek block prefetch kar sakta hai,
  • kai sums ek saath compute kar sakta hai (SIMD),
  • a ka block store kar sakta hai — order ab matter nahi karta.
Figure — restrict keyword — aliasing hint

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
  • restrict kis category ka token hai? (qualifier? keyword?)
  • Kya compiler tumhara restrict promise verify karta hai?
  • Kya hota hai agar do restrict pointers actually overlap karein?
  • Kaun sa standard function restrict-like semantics rely karta hai: memcpy ya memmove?
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

Concept Map

is a

asserts

negates

if broken

forces

causes

blocks

removes

enables

requires

uses restrict semantics

no promise

restrict qualifier C99

Programmer promise

Aliasing overlap

No-aliasing hint

Undefined behaviour

Worst-case assumption

Extra re-loads

Vectorization SIMD

Disjoint memory regions

memcpy

memmove