학습 날짜

학습 시간

학습 범위 및 주제

동료 학습 방법

학습 목표

상세 학습 내용

restrict 포인터에 대한 이해

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)

다음과 같이 되는 것을 볼 수 있다. 아래의 코드와 같이 매개변수에 들어있는 메모리 주소가 같은 공간일 수 있기때문에 컴파일러는 매번 메모리에 접근하여 값을 가져온다.