끄적끄적

반응형

3. 레지스터변수(Resister variable) 


레지스터 변수란 그 값의 저장장소가 메모리가 아니라 CPU안에 있는 기억장소인 레지스터를 선택함으로써 연산을 빠르게 수행하기 위한 변수입니다. 

많은 횟수를 반복하는 반복 문에서 연산을 할 때 사용하면 매우 유용합니다. 

레지스터 변수는 외부변수와 정적 변수는 정의할 수 없고 자동변수나 함수의 매개변수로만 정의하여 사용할 수 있습니다. 

레지스터 변수는 4byte 크기의 자료 형 만이 가능하며 int형, unsigned형이 사용 가능 합니다. 

그 이유는 현재 레지스터의 크기가 일반적으로 32비트이기 때문입니다. 

CPU의 레지스터 개수가 많지 않기 때문에 레지스터 변수는 두 개까지만 선언할 수 있습니다. 

세 개 이상의 레지스터 변수를 선언하면 최초 두 개까지만 레지스터 변수가 되고 나머지는 auto 변수가 됩니다. 



 레지스터변수의 특징 

키워드: register 

유효범위: 변수가 선언된 블록 내부 

초기화: 초기화 하지 않으면 쓰레기 값을 갖게 됩니다.


 자동변수의 선언 형식 

register 자료형 변수명;


8-3 실습예제 (register 변수에 초기값을 주지 않는 경우를 알아보는 프로그램) 


#include <stdio.h>


int main() 

register

int i; 

    printf("i = %3d \n", i); 

        { 

            register

int i = 100; 

            printf("i = %3d \n", i); 

        } 

        return 0; 

}


i = -838993460 

i = 100


레지스터 변수도 초기화 하지 않으면 쓰레기 값을 갖게 되며 블록 내에서만 유효합니다. 



8-4 실습예제 (register 변수에 주소 연산자(&)를 사용한 경우) 


#include <stdio.h>


int main() 

    register

int a; 

    a = 5; 

    printf("%d\n",a); 

    printf("%d\n",&a); 

    return 0; 

}


VC++ 6.0에서는 레지스터 변수에는 주소 연산자를 사용할 수 없다는 에러 메시지를 출력합니다. 

VC++ 2005에서는 에러가 발생하지 않음 

모든 레지스터 변수를 컴파일러가 auto 변수로 변환해서 해석하기 때문입니다.


레지스터 변수도 초기화 하지 않으면 쓰레기 값을 갖게 되며 블록 내에서만 유효합니다. 

위와 같이 auto 변수와 register 변수는 함수 안이나 블록 안에서 선언하여 사용하는 변수입니다. 

유효 범위는 함수 안이나 블록 내부로 한정됩니다. 

이런 변수를 지역변수라고도 합니다. 

반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]