학습 날짜
restrict 포인터는 메모리 접근에 관련된 최적화 기능이다. 예를 들어 아래와 같은 포이너를 역참조하여 값을 증가시키는 코드가 있다.
void increase(int *a, int *b, int *x)
{
*a += *x;
*b += *x;
}
이 코드를 gcc에서 컴파일한 뒤 어셈블리 코드로 살펴보면
mov (%rdx),%eax
add %eax,(%rdi)
mov (%rdx),%eax
add %eax,(%rsi)
다음과 같이 되는 것을 볼 수 있다. 아래의 코드와 같이 매개변수에 들어있는 메모리 주소가 같은 공간일 수 있기때문에 컴파일러는 매번 메모리에 접근하여 값을 가져온다.