기억부류로는 총 4가지가 있다
전역, 지역, 정적, 레지스터
- 지역변수와 전역변수
지역변수와 전역변수는 변수의 선언 위치에 따라서 결정된다
함수나 블록 안에서 변수를 선언하면 그 변수는 지역 변수가 되고,
main 함수 밖에서 선언하면 전역 변수가 된다
지역 변수는 해당 함수나 블록 내에서만 사용할 수 있고
전역 변수는 프로그램 전체에서 사용할 수 있다
전역 변수와 지역 변수가 중복해서 선언되어 있으면 지역 변수 값이 우선이다
- 자동(auto) 변수
가장 많이 사용하는 기억 클래스로 auto는 생략이 가능하다
함수 또는 블록의 내부에서 선언하며 해당 함수(블록) 내에서만 유효한 지역 변수이다
스택 공간을 일시적으로 사용한다
함수나 블록을 진입하면 기억 영역이 확보되고, 벗어나면 기억 영역은 바로 소거된다
초기화는 실행 시 이루어지며, 초기화하지 않으면 임의의 값(쓰레기 값)을 갖는다
- 레지스터(register) 변수
register 변수는 auto 변수와 동일한 특징을 갖고 있다
다만 스택이 아니라 CPU 내의 레지스터에 저장하여 고속 처리가 가능하다
register 변수는 정수형, 포인터 등 4바이트 데이터만 저장이 가능하다
두 개까지만 선언이 가능하고, 초과된 변수는 auto로 지정된다
컴파일러가 최적화 과정에서 적절한 변수를 레지스터 변수로 만들기 때문에 일부러 지정할 필요는 없다
- 정적(static) 변수
static 변수는 프로그램이 종료될 때까지 값을 유지한다
처음 실행 시 한 번만 초기화되고 초기화 값이 없으면 0으로 초기화된다
스택이 아닌 데이터 영역을 사용하고 internal(함수의 내부)로 작동한다
- extern 변수
extern 변수는 해당 파일에 실제로 있는 변수가 아니라
프로그램의 다른 파일에 선언된 변수를 사용하기 위해 사용한다
정적(static) 변수와 마찬가지로 데이터 영역을 사용하지만 external(함수의 외부)로 작동한다
- 변수와 메모리 영역
auto 변수는 스택
register 변수는 CPU의 레지스터
static 변수와 전역변수는 정적 데이터 영역
'C > [코드조선] C 핵심' 카테고리의 다른 글
[C] 연산자 (0) | 2024.02.02 |
---|---|
[C] 탈출 문자열(Escape Sequence)과 서식 지정자(Format Specifier) (0) | 2024.02.01 |
[C] 컴파일과 빌드 (0) | 2024.02.01 |
[C] Low-Level Language와 High Level Language (0) | 2024.02.01 |
[C] 와일드 포인터(Wild pointer) 댕글링 포인터(Dangling pointer) (0) | 2023.11.21 |