카테고리 없음

Register

게임 개발 2023. 2. 28. 14:49

레지스터 변수란?

 

지역, 전역, 정적 변수들은 어쨌든

정적 영역이든 스택 영역이든 메모리의 한구석에 생성되지만

레지스터형 변수는 메모리가 아닌 CPU의 레지스터에 저장된다.

레지스터란 CPU를 구성하는 부품 중 하나이며

CPU가 데이터를 처리하기 위해 사용하는 임시 작업장이라고 생각하면 된다.

컴퓨터의 가장 핵심적인 부품인 CPU의 한 가운데 있는 기억 장소이기 때문에 레지스터의 속도는

메모리와 비교가 되지 않을 정도로 빠르다.

값을 읽거나 쓰는데 수십억분의 1초 정도밖에 걸리지 않는다.

CPU의 종류에 따라 다르지만 레즈스터는 보통 10~20개 정도밖에 없는 아주 귀한 장소인데,

여기에 변수를 저장하면 이 변수를 참조하는 문장의 속도가 빨라진다.

 

레지스터의 크기는 CPU의 비트수를 결정하는 중요한 기준인데

32비트면 32비트 CPU라고 부른다.

현재까지 우리가 사용하는 CPU는 대부분 32비트이므로 레지스터들도 모두 32비트이고

따라서 레지스터에 저장할 수 있는 변수의 타입은 int, unsigned, 포인터 형 등 32비트형 뿐이다.

double같은 실수형은 저장할 수 없으며 구조체나 배열 따우는 당연히 안된다.

에러는 아니지만 지정해봤자 무시만 당할 뿐이다.

 

레지스터는 한정된 자원이기 떄문에 일시적으로 사용할 지역변수에만 지정할 수 있으며

전역변수에는 레지스터 기억 부류를 지정할 수 없다.

프로그램과 생명을 같이 하는 전역변수가 레지스터 하나를 차지한다면

프로그램 실행중인 프로그렘 실행중인 동안 레지스터 하나가 묶여 버리게 될 것이다.

 

전역변수에 Register 기억 부류를 지정하면 명백한 에러로 처리된다.

지역변수 또는 함수의 형식 인수에 대해서만 이 기억 부류를 사용할 수 있다.