728x90

<스토리지 클래스> : 기억 부류

변수나 함수를 선언할 때 사용되는 키워드

저장 위치와 사용 범위를 결정

변수나 함수 선언 시 맨 앞에 지정

변수의 디폴트 기억 부류는 auto이고, 함수의 디폴트 기억 부류는 extern

-형식:

기억부류 데이터형 변수명;

기억부류 리턴형 함수형(매개변수 리스트);

 

<auto 변수>

- 지역 변수는 자동 변수임

- 지역 변수는 디폴트로 auto 기억 부류를 사용 (전역 변수에는 auto 지정 불가)

auto 지역 변수는 선언된 위치에서 자동으로 생성되고, 선언된 블록을 빠져나갈 때 자동으로 해제됨

ex) auto int x =10 ; 이런식으로 원래는 다 auto가 생략되는 것

- for 루프에서 선언 시 루프 내에서만 통용

 

<register 변수>

- 변수를 메모리에 할당하는 대신 CPU의 레지스터에 할당

cf) 레지스터에 할당하면 변수에 좀 더 빠르게 접근, 액세스 속도가 빨라짐

- 보통 루프 제어 변수를 레지스터 변수로 선언

- register 변수로 선언해도 변수가 레지스터에 할당되지 않을 수 있음 ( 일정 개수 넘어가면 다 차서, 일반적으로 2,4,6개등 시스템마다 다름)

- 레지스터 변수에 대해서는 주소 구하기 연산자를 사용할 수 없음: 레지스터 변수의 주소는 구할 수 없으므로 에러

 

<global 변수>

- 다른 곳에 선언된 변수에 대하여 별도의 메모리 할당 없이 해당 변수를 사용

- 전역 변수를 코드 중간에 선언하면, 전역 변수가 선언된 뒤쪽에 정의된 함수에서만 전역 변수를 사용 가능

- 전방 선언(Forward Declaration): 전역 변수에 대한 extern 선언이 있으면 전역 변수가 선언된 위치와 관계없이 전역 변수 사용 가능 ('외부에 있는 거 참조하시오'라는 뜻)

- 다른 파일에서도 사용 가능

 

<static: 정적 변수> 기억 장소에 남아있는..!!

· 정적 지역 변수

- 번역 과정의 마지막 단계인 적재 시간에 기억 장소를 할당받는 변수

- 전체 프로그램의 시작부터 종료까지를 생존 기간으로 하며 동일 기억 장소를 유지

- 초기화는 기억 공간 할당 시 한 번만 초기화됨 (처음에 한번만) (누적 유지)

- 정적 지역 변수는 전역 변수처럼 프로그램이 시작할 때 메모리에 할당되고 프로그램이 종료할 때 해제

- 전역 변수와는 달리 정적 지역 변수는 선언된 함수 안에서만 사용

- 정적 지역 변수는 함수가 리턴하더라도 해제되지 않고 남아있다가 그 다음 함수 호출 시 그대로 다시 이용

 

· 정적 전역 변수 

- 정적 전역 변수는 정적 전역 변수가 선언된 소스 파일에서만 사용

- 정적 전역 변수는 전역 변수를 다른 소스 파일에서 접근하지 못하도록 제한

 

 

<스토리지 클래스의 비교>

- 일반 지역 변수는 초기화하지 않았을 때 쓰레기 값을 가짐, 나머지는 0으로 초기화인데!!

728x90

'C언어' 카테고리의 다른 글

C언어 - 전처리기, 매크로, 조건부 컴파일  (0) 2021.07.10
C언어 - 포인터 배열  (0) 2021.07.10
C언어- 함수의 인자  (0) 2021.07.09
C언어 - 공용체와 열거체  (0) 2021.07.09
C언어 - 구조체  (0) 2021.07.09

+ Recent posts