[C언어] static 변수, register 변수

static 변수


특성이 전역변수와 비슷하다.

메모리 공간을 할당받고 초기화가 이루어지면, 프로그램이 종료될 때까지 소멸되지도 않고 초기화도 두 번 다시 일어나지 않는다.

단, 지역내에서만 접근을 허용한다.


void Add(int a, int b)
{

static int val = 0;

val +=a+b;

}


static 변수는 한번만 초기화 되므로, static int val =0 ; 이것은 딱 한번만 실행된다. 두번째 Add 함수 호출 부터는 실행되지 않는다.


프로그램이 실행되는 동안에 계속해서 유지되어야 한다.

그러나, 접근 영역이 한정되어 특정 지역에서만 사용한다면 전역변수를 쓰지말고 static 변수를 사용한다.



register 변수


int a;

register int b; //레지스터 변수 b 선언.


CPU의 '레지스터'라는 메모리 영역에 저장된다. 레지스터는 CPU의 접근이 가장 빠른 메모리 공간이다. 따라서 변수 a보다 b가 빠르게 처리된다.


그러나 regsiter 변수의 선언은 명령이 아니라 요청에 가깝다. 왜냐하면 register라는 선언은 무시될 수도 있기 때문이다.

CPU의 레지스터는 그 크기가 제한되어 있는 메모리 공간이다. 따라서 이 공간에 변수를 할당하는 것이 여의치 않을 경우 이러한 요구는 충분히 무시될 수 있다.


생성과 소멸이 빈번한 변수를 register 변수로 선언하게 되면 많은 성능의 향상을 기대할 수 있다.

그러나 register 변수의 선언과 관련해서 고민할 필요는 없다. 대부분 컴파일러가 알아서 붙여준다.