본문 바로가기
C/[코드조선] C 핵심

[C] 기억부류 지정자

by 묻공러 2023. 10. 29.

기억부류로는 총 4가지가 있다

전역, 지역, 정적, 레지스터

 

- 지역변수와 전역변수

지역변수와 전역변수는 변수의 선언 위치에 따라서 결정된다

함수나 블록 안에서 변수를 선언하면 그 변수는 지역 변수가 되고,

main 함수 밖에서 선언하면 전역 변수가 된다

지역 변수는 해당 함수나 블록 내에서만 사용할 수 있고

전역 변수는 프로그램 전체에서 사용할 수 있다

전역 변수와 지역 변수가 중복해서 선언되어 있으면 지역 변수 값이 우선이다

 

- 자동(auto) 변수

가장 많이 사용하는 기억 클래스로 auto는 생략이 가능하다

함수 또는 블록의 내부에서 선언하며 해당 함수(블록) 내에서만 유효한 지역 변수이다

스택 공간을 일시적으로 사용한다

함수나 블록을 진입하면 기억 영역이 확보되고, 벗어나면 기억 영역은 바로 소거된다

초기화는 실행 시 이루어지며, 초기화하지 않으면 임의의 값(쓰레기 값)을 갖는다

 

- 레지스터(register) 변수

register 변수는 auto 변수와 동일한 특징을 갖고 있다

다만 스택이 아니라 CPU 내의 레지스터에 저장하여 고속 처리가 가능하다

register 변수는 정수형, 포인터 등 4바이트 데이터만 저장이 가능하다

두 개까지만 선언이 가능하고, 초과된 변수는 auto로 지정된다

컴파일러가 최적화 과정에서 적절한 변수를 레지스터 변수로 만들기 때문에 일부러 지정할 필요는 없다

 

- 정적(static) 변수

static 변수는 프로그램이 종료될 때까지 값을 유지한다

처음 실행 시 한 번만 초기화되고 초기화 값이 없으면 0으로 초기화된다

스택이 아닌 데이터 영역을 사용하고 internal(함수의 내부)로 작동한다

 

- extern 변수

extern 변수는 해당 파일에 실제로 있는 변수가 아니라

프로그램의 다른 파일에 선언된 변수를 사용하기 위해 사용한다

정적(static) 변수와 마찬가지로 데이터 영역을 사용하지만 external(함수의 외부)로 작동한다

 

- 변수와 메모리 영역

auto 변수는 스택

register 변수는 CPU의 레지스터

static 변수와 전역변수는 정적 데이터 영역