1. 자료형, 기억 클래스 비교
ㅇ 자료형 (char,int,float 등) : 자료의 연산 성격(문자열 처리,사칙연산 등)과 크기를 지정
ㅇ 기억 클래스 (auto,static,register등) : 자료의 위치,유효 범위(scope),유효 기간(lifetime) 지정
2. [C 언어] 기억 클래스 역할
ㅇ 변수를 위한 기억장치 할당 관리의 효율화를 도모
- 레지스터, 메모리, 스택 등 어디에 할당하느냐에 따라,
- 변수의 유효범위(변수의 사용 범위),유효기간(변수의 생존 기간)이 달라지며,
- 그에따라, 메모리의 효율적 관리가 가능해짐
3. [C 언어] 기억 클래스 구분 ☞ Scope/Lifetime 참조
ㅇ 유효기간 (lifetime) : 메모리 할당 방식에 따른 구분
- 정적 할당 : 프로그램 종료시까지 생존함
. 정적 변수 (static), 외부 변수 (extern)
- 동적 할당 : 변수가 선언된 블록이 끝나면 자동으로 소멸됨
. 자동 변수 (auto), 레지스터 변수 (register)
ㅇ 유효범위 (scope) : 변수가 선언된 위치에 따라 구분
- 지역 변수 : 블록 내부에서 선언된 변수로써, 해당 블록 내부에 만 한정됨
. 자동 변수 (auto), 레지스터 변수 (register), 내부 정적 변수 (inner static)
- 전역 변수 : 블록 밖에서 선언된 변수로써, 선언된 이후부터 전체에 걸쳐 사용 가능
. 외부 정적 변수 (extern static), 외부 변수 (extern)
* [참고] C 언어에서, 전역 변수는 프로그램 시작시 자동으로 0 값으로 초기화됨
4. [C 언어] 기억 클래스 지정자 (storage class specifier)
ㅇ auto : 자동 변수
* 함수나 블록 내부에서 만 선언/사용되는 가장 일반적인 변수로서,
. 지정자 auto 생략 가능
- (할당방식) 동적 할당
- (기억장소) 스택
- (유효범위) 블록 내부
- (유효기간) 블록 내부
ㅇ register : 레지스터 변수
* 요즈음에는 컴파일러가 알아서 CPU 레지스터를 사용하므로 사용 빈도 거의 없음
- (할당방식) 동적 할당
- (기억장소) 레지스터
- (유효범위) 블록 내부
- (유효기간) 블록 내부
ㅇ static : (내부) 정적 변수
* 지역 변수는 기본적으로 동적 할당이지만,
. 지정자 static을 붙여서 정적 할당으로 변경 가능 등
- (할당방식) 정적 할당
- (기억장소) 메모리
- (유효범위) 블록 내부
- (유효기간) 프로그램 종료시까지
ㅇ static : (외부) 정적 변수
- (할당방식) 정적 할당
- (기억장소) 메모리
- (유효범위) 변수 선언 이후부터 프로그램 전체
- (유효기간) 프로그램 종료시까지
ㅇ extern : 외부 변수
* 큰 프로그램 내 다른 함수 또는 파일에서 선언된 변수를 공유 사용
- (할당방식) 정적 할당
- (기억장소) 메모리
- (유효범위) 외부 파일을 포함한 프로그램 전체
- (유효기간) 프로그램 종료시까지
ㅇ volatile
* 컴파일러가 volatile 변수에 관련된 문장을 최적화하지 말라는 지시어