I've read a number of posts on the restrict keyword. But virtually every example I can find seem to refer to input parameters only to a function and, perhaps a single value. I need to clarify my understanding.
I've found a function that looks like it totally violates the rules of the keyword with both an input parameter and a local variable.
This function is called with a void* to a buffer and the pointer is declared as __restrict (this is Microsoft Visual C++). Yet later in the function, a local variable pointer of type UCHAR* is declared and made to point to that same restricted input parameter buffer.
Here is a seriously chopped down version of the function I'm talking about:
void Foo(int nVersion, int nX, int nY, int nWidth, void * __restrict pBuffer) const
{
// ... blah blah blah
UCHAR * __restrict pBufferPtr = ((UCHAR *) pBuffer) + 10; // Isn't this aliasing?
const void * __restrict pData = (blah blah blah); //... Get from some function call;
memcpy(pBufferPtr, pData, nWidth);
}
Does the above example violate the rules of restrict?
The restrict keyword only means that the pointers should point to unique portions of memory. In the above code, pBuffer points to something, let's call it A, pBufferPtr points to A+10, PData points to something completely different, B, so there's no violations.
C++ has no such keyword as restrict. Moreover in your example there are two different words: __restrict and RESTRICT. I think that the first word is implementation defined and the second word denotes a macro. It is C that has the keyword restrict.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With