You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/cpp/restrict.md
+30-31Lines changed: 30 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: "restrict | Microsoft Docs"
3
3
ms.custom: ""
4
-
ms.date: "11/04/2016"
4
+
ms.date: "02/09/2018"
5
5
ms.reviewer: ""
6
6
ms.suite: ""
7
7
ms.technology: ["cpp-language"]
@@ -18,37 +18,36 @@ manager: "ghogen"
18
18
ms.workload: ["cplusplus"]
19
19
---
20
20
# restrict
21
-
**Microsoft Specific**
22
-
23
-
Applied to a function declaration or definition that returns a pointer type and tells the compiler that the function returns an object that will not be aliased with any other pointers.
24
-
25
-
## Syntax
26
-
27
-
```
28
-
__declspec(restrict) return_type f();
29
-
```
30
-
31
-
## Remarks
32
-
The compiler will propagate `__declspec(restrict)`. For example, the CRT `malloc` function is decorated with `__declspec(restrict)` and therefore, pointers initialized to memory locations with `malloc` are also implied to not be aliased by previously existing memory.
21
+
22
+
**Microsoft Specific**
23
+
24
+
When applied to a function declaration or definition that returns a pointer type, `restrict` tells the compiler that the function returns an object that is not *aliased*, that is, referenced by any other pointers. This allows the compiler to perform additional optimizations.
The compiler does not check that the pointer is actually not aliased. It is the developer's responsibility to ensure the program does not alias a pointer marked with the `restrict __declspec` modifier.
30
+
## Remarks
31
+
32
+
The compiler propagates `__declspec(restrict)`. For example, the CRT `malloc` function has a `__declspec(restrict)` decoration, and therefore, the compiler assumes that pointers initialized to memory locations by `malloc` are also not aliased by previously existing pointers.
33
+
34
+
The compiler does not check that the returned pointer is not actually aliased. It is the developer's responsibility to ensure the program does not alias a pointer marked with the `restrict __declspec` modifier.
35
35
36
-
For similar semantics on variables, see [__restrict](../cpp/extension-restrict.md).
36
+
For similar semantics on variables, see [__restrict](../cpp/extension-restrict.md).
37
37
38
-
For another annotation that can impact aliasing, see also[__declspec(noalias)](../cpp/noalias.md).
38
+
For another annotation that applies to aliasing within a function, see [__declspec(noalias)](../cpp/noalias.md).
39
39
40
-
For information about the restrict keyword that is part of C++ AMP, see [restrict (C++ AMP)](../cpp/restrict-cpp-amp.md).
40
+
For information about the **restrict** keyword that is part of C++ AMP, see [restrict (C++ AMP)](../cpp/restrict-cpp-amp.md).
41
41
42
42
## Example
43
43
44
-
The following sample demonstrates using `__declspec(restrict)`.
45
-
46
-
Decorating functions that return pointers with `__declspec(restrict)` tells the compiler that the memory pointed to by the return value is not aliased. In this example, the pointers `mempool` and `memptr` are global so the compiler has no assurance that the memory is not subject to aliasing. However, they are used in such a way that each invocation of `ma` and `init` return memory that isn't otherwise referenced by the program, so `__decslpec(restrict)` is used to help the optimizer. This is similar to how the CRT headers decorate allocation functions such `malloc` as `restrict` to indicate that they always return memory that cannot be aliased by existing pointers.
44
+
The following sample demonstrates the use of `__declspec(restrict)`.
47
45
48
-
Decorating functions with `__declspec(noalias)` tells the compiler that the function does not interfere with the global state except through the pointers in its parameter list. in the example that accesses memory
46
+
When `__declspec(restrict)`is applied to a function that returns a pointer, this tells the compiler that the memory pointed to by the return value is not aliased. In this example, the pointers `mempool` and `memptr` are global, so the compiler can't be sure that the memory they refer to is not aliased. However, they are used within `ma` and its caller `init`in a way that returns memory that isn't otherwise referenced by the program, so `__decslpec(restrict)` is used to help the optimizer. This is similar to how the CRT headers decorate allocation functions such as `malloc` by using `__declspec(restrict)` to indicate that they always return memory that cannot be aliased by existing pointers.
49
47
50
48
```C
51
-
// declspec_noalias.c
49
+
// declspec_restrict.c
50
+
// Compile with: cl /W4 declspec_restrict.c
52
51
#include<stdio.h>
53
52
#include<stdlib.h>
54
53
@@ -76,7 +75,7 @@ __declspec(restrict) float * init(int m, int n)
0 commit comments