레지스터 변수는 블록 혹은 함수 내에 변수를 선언할 때 register 예약어를 사용합니다.
레지스터 변수의 가장 큰 특징은 저장 공간이 할당되는 위치에 있습니다. 바로 이름과 같이 레지스터 변수는 CPU 안에 있는 저장 공간인 레지스터를 사용합니다.
레지스터는 CPU 안에 있어 데이터 처리 속도가 가장 빠른 저장 공간입니다. 따라서 반복문에 쓰는 변수와 같이 사용 횟수가 많은 경우 레지스터에 할당하면 실행 시간을 줄일 수 있습니다.
// 레지스터 변수를 반복문에 사용한 예
int main(void)
{
register int i; // 레지스터 변수
auto int sum = 0; // auto 지역 변수
for (i = 1; i <= 10000; i++) // 반복 과정에서 i를 계속 사용함
{
sum += i;
}
plrintf("%d\n", sum);
return 0;
}
자주 사용하는 변수를 레지스터 변수로 선언하면 변수의 저장 공간이 램 메모리에 있을 때보다 빨라 프로그램 실행 시간을 줄일 수 있습니다. 메인 메모리에 있는 일반 변수의 값은 레지스터로 옮긴 후에 연산 장치에 사용됩니다. 따라서 레지스터에 값을 저장하면 메인 메모리에 접근하는 시간을 줄일 수 있습니다.
전역 변수는 레지스터 변수로 선언할 수 없습니다. 레지스터 변수는 CPU의 자원을 잠깐 빌리는 것이므로 프로그램을 실행하는 동안 계속 저장 공간을 확보해야 하는 전역 변수는 레지스터에 할당할 수 없습니다.
레지스터 변수는 주소를 구할 수 없습니다. 레지스터 변수는 저장 공간이 메모리에 있는 것이 아니므로 주소 연산자를 써서 주소를 구할 수 없습니다.
레지스터의 사용 여부는 컴파일러가 결정합니다. 재미있겠도 레지스터 변수를 선언했다고 모두 레지스터에 변수가 생성되는 것은 아닙니다. 레지스터는 CPU의 연산장치가 사용하는 비싸고 중요한 저장 공간이므로 당장 연산할 필요가 없는 데이터를 레지스터에 보관하면 레지스터의 활용성이 떨어집니다. 따라서 컴파일러는 사용자가 레지스터 변수를 선언하더라도 레지스터와 메모맂 중에 어디에 할당하는 것이 더 이득인지 판단하여 적당한 저장 공간을 선택합니다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[혼자 공부하는 C언어] 주소를 전달하는 방법 (0) | 2022.12.11 |
---|---|
[혼자 공부하는 C언어] 값을 복사해서 전달하는 방법 (0) | 2022.12.11 |
[혼자 공부하는 C언어] 정적 지역 변수 (0) | 2022.12.10 |
[혼자 공부하는 C언어] 전역 변수 (0) | 2022.12.10 |
[혼자 공부하는 C언어] 블록 안에서 사용하는 지역 변수 (0) | 2022.12.10 |