Search code examples
cgccc99restrict-qualifier

Realistic usage of the C99 'restrict' keyword?


I was browsing through some documentation and questions/answers and saw it mentioned. I read a brief description, stating that it would be basically a promise from the programmer that the pointer won't be used to point somewhere else.

Can anyone offer some realistic cases where its worth actually using this?


Solution

  • restrict says that the pointer is the only thing that accesses the underlying object. It eliminates the potential for pointer aliasing, enabling better optimization by the compiler.

    For instance, suppose I have a machine with specialized instructions that can multiply vectors of numbers in memory, and I have the following code:

    void MultiplyArrays(int* dest, int* src1, int* src2, int n)
    {
        for(int i = 0; i < n; i++)
        {
            dest[i] = src1[i]*src2[i];
        }
    }
    

    The compiler needs to properly handle if dest, src1, and src2 overlap, meaning it must do one multiplication at a time, from start to the end. By having restrict, the compiler is free to optimize this code by using the vector instructions.

    Wikipedia has an entry on restrict, with another example, here.