Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 레지스터 저장 클래스(register)란? 개념과 예제 총정리


C 프로그래밍 언어에는 네 가지 저장 클래스(storage class)가 있습니다.

  • auto
  • extern
  • static
  • register

레지스터 변수(Register Variables)란?

  • 사용하는 키워드는 register입니다.
  • 일반 변수가 메모리(RAM)에 저장되는 것과 달리, 레지스터 변수의 값은 CPU의 레지스터에 저장됩니다.
  • 레지스터는 CPU 내부에 존재하는 고속 임시 저장 장치입니다.
  • 따라서 레지스터 변수는 일반 변수보다 훨씬 빠른 접근 속도를 제공하므로, 반복문 카운터처럼 자주 접근해야 하는 변수에 적합합니다.

예제 1

다음은 레지스터 저장 클래스를 사용한 C 프로그램입니다.

#include<stdio.h>
main ( ){
    register int i;
    for (i=1; i<=5; i++)
       printf ("%d ",i);
}

출력 결과

1 2 3 4 5

반복문의 카운터 변수 i를 레지스터 변수로 선언하여 반복 시마다 빠르게 접근할 수 있도록 한 예제입니다.

예제 2

초기화하지 않은 레지스터 변수의 기본값을 확인하는 C 프로그램입니다.

#include<stdio.h>
int main(){
    register int a;
    printf("%d",a); // a의 기본값 0이 출력됨
}

출력 결과

0

별도의 초기화 없이 선언만 한 레지스터 변수는 기본값 0을 가집니다.

예제 3

레지스터 변수에는 주소 연산자(&)를 사용할 수 없습니다. 레지스터는 메모리가 아니므로 메모리 주소가 존재하지 않기 때문입니다. 다음 프로그램은 레지스터 변수의 주소를 요청했을 때 발생하는 오류를 보여줍니다.

#include<stdio.h>
int main(){
    register int i = 10;
    int *p;
    //int *p = &i; // 오류 발생: 레지스터 변수의 주소를 요청
    printf("Value of i: %d", *p);
    printf("Address of i: %u", p);
}

출력 결과

Error:add of reg var?

위 코드처럼 레지스터 변수의 주소를 포인터에 할당하려 하면 컴파일 오류가 발생합니다.

정리 및 참고 사항

register 키워드는 컴파일러에게 "이 변수를 가능하면 레지스터에 저장해 달라"고 알려주는 힌트(hint)일 뿐입니다. 실제로 변수를 레지스터에 저장할지 여부는 컴파일러가 상황에 따라 판단하며, 레지스터 공간이 부족하면 일반 메모리에 저장될 수도 있습니다. 또한 레지스터 변수는 주소를 가질 수 없으므로 & 연산자를 적용할 수 없다는 점을 반드시 기억해야 합니다.