본문 바로가기
프로그래밍/c

C언어에서 기억 클래스의 종류

by 신일석 2019. 5. 26.

C언어에서 기억 클래스의 종류

C언어에서 사용되는 기억 클래스는 자동변수(auto), 정적변수(static), 외부변수(extern), 레지스터 변수(register)가 있습니다.

자동변수

예약어: auto(생략가능하며 보통 생략)
함수가 실행되는 동안에만 기억공간 중 임시기억 장소인 stack에 존재한다.
scope는 변수가 선언된 함수 또는 블록 안으로 한정된다.
지역변수가 이에 해당한다.
초기화하지 않으면 쓰레기 값을 가질 수 있어 사용시 초기화하여 사용하는 것이 좋다.

정적변수

예약어: static
변수의 기억 영역이 프로그램이 끝날 때까지 유지된다.
static으로 선언된 변수는 함수가 종료되거나 블록을 벗어나도 지정된 값을 유지한다.
모든 전역변수가 이에 해당한다.
전역변수와 다른점은 전역은 어디에서나 접근이 가능하지만 정적변수는 선언된 지역 내에서만 접근이 가능하고, 프로그램이 실행 중에 값이 계속 유지된다.
정적변수의 선언이 이루어지면 컴파일될 때 정적인 기억 영역 확보되어 변수에 할당된다.
정적인 기억 영역은 임시기억 장소인 static이 아닌 일반 기억 영역을 말한다.
초기값 부여는 컴파일할 때 한 번 이루어지며 특별한 지정이 없으면 0으로 초기화된다.

외부변수

예약어: extern
함수의 외부에 선언되어 전역변수와 같다.
초기값은 0이고 프로그램이 종료될 때까지 유지된다.
전역변수, 정적변수, 외부변수의 다른 점은 외부변수는 다른 파일에서 외부변수로 선언된 변수의 값을 참조할 수 있다는 것이다.
기억 영역의 할당은 정적변수와 같다.

레지스터 변수

예약어: register
CPU 내의 레지스터에 자료를 저장한다.
기억장치보다 레지스터의 자료입출력이 빠르기 때문에 실행 속도를 조금이나마 늘리기 위해 사용한다.
특별한 경우가 아니면 전역변수를 권장
자동변수와 동일한 속성을 가지고 있으며, 일반적으로 정수형(문자형 포함) 자료에 사용된다.
전역변수로는 사용될 수 없다.
기억공간에 저장되지 않기 때문에 포인터도 상ㅇ할 수 없다.

예를 들어 32bit 컴퓨터의 경우 레지스터의 크기가 32bit이므로 이 크기를 넘는 자료형을 레지스터 변수로 사용될 수 없다.

'프로그래밍 > c' 카테고리의 다른 글

vs code에서 wsl을 이용한 c/c++ 컴파일  (0) 2019.05.16