C Programming

C언어 레지스터 변수 - 공부하는 도비

DOVISH WISDOM 2022. 11. 6. 14:45  
728x90
반응형

C언어를 사용하며 선언한 대부분의 변수는 메모리의 일정 공간을 할당받아 변수를 선언하고, 연산을 위해 CPU 내부 레지스터(register)로 복사되어 연산을 수행합니다. 또한, 저장이 필요한 경우 다시 레지스터 값을 메모리에 저장을 합니다. 

 

따라서, 메모리를 읽어 레지스터로 복사하는 과정다시 레지스터에서 변경된 값을 메모리에 쓰는 과정이 필요합니다.

이러한 과정을 거치지 않기 위해서 C언어는 레지스터 변수라는 것을 사용합니다.

 

레지스터 변수

메모리가 아닌 레지스터 공간에 할당하여 사용하는 변수

레지스터 변수의 가장 큰 장점은 메모리 접근이 이뤄지지 않기 때문에, CPU 내부에서 빠른 연산을 통한 프로그램 전체 성능에 도움을 줍니다.

 

아래 그림처럼,

일반적인 변수는 선언한 변수가 메모리의 일부분에 저장되고 이를 CPU 내부 레지스터에 복사되는 반면

레지스터 변수는 메모리 접근을 하지 않습니다. 

 

레지스터 변수를 선언할 때는 register이라는 키워드를 사용합니다. 

#include <stdio.h>
#include <time.h>

int main() 
{
	int sum_sta = 0, sta_1 = 0, sta_2 = 0;
	register int sum_reg = 0, reg_1 = 0,reg_2 = 0;
	
	// 일반 변수
    clock_t time_1 = clock(), time_2;
	for(sta_1 = 0; sta_1 < 10000; sta_1++)
		for(sta_2 = 0; sta_2 < 10000; sta_2++)
			sum_sta += sta_1;
	printf("int          : %ldms \n", clock() - time_1);
	
	// 레지스터 변수
	time_2 = clock();
	for(reg_1 = 0; reg_1 < 10000; reg_1++)
		for(reg_2 = 0; reg_2 < 10000; reg_2++)
			sum_reg += reg_1;
	printf("register int : %ldms", clock() - time_2);
	
	return 0;
}

출력 결과

위 코드는 일반적인 변수와 레지스터 변수의 계산 속도 차이를 나타낸 코드입니다.

결과를 보면, 레지스터 변수가 현저히 빠른 걸 알 수 있습니다. 

 

 

반응형