restrict
Microsoft 전용
포인터 형식 restrict
을 반환하는 함수 선언 또는 정의에 적용하면 함수가 별칭이 지정되지 않은 개체, 즉 다른 포인터에서 참조하는 개체를 반환하도록 컴파일러에 알릴 수 있습니다. 이렇게 하면 컴파일러가 추가 최적화를 수행할 수 있습니다.
구문
__declspec(restrict)
pointer_return_type 함수();
설명
컴파일러가 전파됩니다.__declspec(restrict)
예를 들어 CRT malloc
함수에는 __declspec(restrict)
장식이 있으므로 컴파일러는 메모리 위치로 malloc
초기화된 포인터도 기존 포인터에 의해 별칭이 지정되지 않는다고 가정합니다.
컴파일러는 반환된 포인터가 실제로 별칭이 지정되지 않는지 검사 않습니다. 프로그램이 제한 __declspec 한정자가 표시된 포인터에 별칭을 지정하지 않도록 하는 것은 개발자의 책임입니다.
변수에 대한 유사한 의미 체계는 __restrict 참조하세요.
함수 내의 별칭에 적용되는 다른 주석은 __declspec(noalias)를 참조하세요.
C++ AMP의 restrict
일부인 키워드(keyword) 대한 자세한 내용은 제한(C++ AMP)을 참조하세요.
예시
다음 샘플에서는 .의 __declspec(restrict)
사용을 보여 줍니다.
포인터를 반환하는 함수에 적용되는 경우 __declspec(restrict)
반환 값이 가리키는 메모리가 별칭이 아님을 컴파일러에 알릴 수 있습니다. 이 예제에서 포인터는 mempool
memptr
전역이므로 컴파일러는 참조하는 메모리에 별칭이 지정되지 않았는지 확인할 수 없습니다. 그러나 프로그램에서 참조하지 않는 메모리를 반환하는 방식으로 내부 및 해당 호출자를 init
사용 ma
하므로 최적화 프로그램을 돕기 위해 __decslpec(제한)가 사용됩니다. 이는 CRT 헤더가 할당 함수를 데코레이트하는 방식(예: malloc
기존 포인터로 별칭을 지정할 수 없는 메모리를 항상 반환함을 나타내는 데 사용 __declspec(restrict)
)과 유사합니다.
// declspec_restrict.c
// Compile with: cl /W4 declspec_restrict.c
#include <stdio.h>
#include <stdlib.h>
#define M 800
#define N 600
#define P 700
float * mempool, * memptr;
__declspec(restrict) float * ma(int size)
{
float * retval;
retval = memptr;
memptr += size;
return retval;
}
__declspec(restrict) float * init(int m, int n)
{
float * a;
int i, j;
int k=1;
a = ma(m * n);
if (!a) exit(1);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
a[i*n+j] = 0.1f/k++;
return a;
}
void multiply(float * a, float * b, float * c)
{
int i, j, k;
for (j=0; j<P; j++)
for (i=0; i<M; i++)
for (k=0; k<N; k++)
c[i * P + j] =
a[i * N + k] *
b[k * P + j];
}
int main()
{
float * a, * b, * c;
mempool = (float *) malloc(sizeof(float) * (M*N + N*P + M*P));
if (!mempool)
{
puts("ERROR: Malloc returned null");
exit(1);
}
memptr = mempool;
a = init(M, N);
b = init(N, P);
c = init(M, P);
multiply(a, b, c);
}
Microsoft 전용 종료
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기