본문 바로가기

프로그래밍/기타

Storage Class

기억류(Storage class)

□ 기억류란?
  선언된 기억 장소가 사용 가능한 범위를 결정 해주는 것.

□ 종   류
 auto : 일반 memory 상에 확보 시. 선언된 구간 안에서만 사용 가능한 지역 변수 기능
 register : cpu 내의 register에 확보 시. auto와 동일한 범위 기능 수행.
 static : memory 상에 확보 시. 선언된 구간에서만 사용 가능한 지역변수와 전역 변수 기능 선별적 사용.
 extern :  일반 memory 상에 확보 시. static와 동일한 범위 기능 수행.


□ AUTO
1. 어떤 함수안이나 block안에서 선언 사용.
2,. 선언된 함수나 선언된 block을 나오면 해당 기억 장소를 이용할 수 없게 됩니다.
     auto 변수는 선언된 block이나 함수의 실행이 종료되면 기억 장소가 memory상에서 소멸되므로.
3. 한정된 memory공간을 효율적으로 활용할 수 있는 장점이 있습니다.
4. 함수 머리부 위에서는 선언할 수 없으며 초기값을 주지 않으면 부정의 값(쓰레기값)을 기억하게 됩니다.
5. 기억류 미 지정시, default 기억류.

□ Register
1. 기억 장소가 Memory가 아니라 CPU내의 Register에 확보된다는 차이점을 빼고는 auto 변수와 동일.
2. 아주 많은 개수의 변수를 register 변수로 선언하여 사용할 수 없습니다.
3. Register변수에는 & 연산자를 사용 불가.
    (& 연산자는 Memory상의 위치 값을 나타내 주는 연산자이기 때문.)
4. 함수 머리부 위에서는 선언할 수 없으나 함수 이름 뒤의 괄로 속에는 선언 가능.
5. register 변수는 프로그램 처리 속도 향상을 위하여 이용하며 초기값 미 지정시 쓰레기 값을 가짐.


□ Static

1. 기억 장소가 memory 에 할당되며 함수 머리부 위나 함수안 또는 블럭안에 서 선언하여 사용합니다.
2. 함수 머리부 위에 선언하면 선언된 부분의 밑 부분에서는 어디에서나 사용 가능합니다. (선언된 부분 위에서는 사용할 수 없습니다.)
3. 함수안이나 블록안에서 선언이 되었을 때는 선언된 블록이나 함수를  벗어 나더라도 기억 장소가 소멸되지 않는다는 것이 auto  변수나 rigister 변수와의 차이점 입니다.
4. 초기값을 부여하지 않더라도 자동적으로 초기화 됩니다.
5. static 변수는 전역 변수로도 지역 변수로도 이용이 됩니다.
6. 자신의 속한 구역 안에서 선언된 지점부터 그 구역 끝까지 사용 가능.

□ Extern
1. 기억 장소가 Memory에 할당되며 자신의 프로그램 안에서만 이용할 때는 함수 머리부 위에서만 선언하여 사용합니다. 그러나 extern 변수의 주용도는 파일상호간에 변수와  그 변수가 기억하고 있는 값을 공유하는데 목적이 있으며, 이럴 경우에는 함수 머리부 위나 블록 또 는 함수안에서 선언하여 사용할 수가 있습 니다.
2. 함수 머리부 위에 선언하면 선언된 부분 밑부분부터 어디에서나 사용 가능합니다. (선언된 부분 위에서는 사용할 수 없습니다. - 즉 선언 이후 사용 가능(함수의 전방 선언)
3. 함수안이나 블록안에서 선언이 되었을 때는 선언된 블록이나 함수를 벗어나더라도 기억 장소가 소멸되지 않는다는 것이 auto 변수는 register 변수아의 차이점입니다.
4. 변수는 초기값은 부여한 후 사용해야 합니다.
5. extern 변수는 주로 화일간에 변수를 공유할 목적으로 이용됩니다.(파일 간에 공유 처리를 하려면 Project File을 만들어야 합니다.)




============================================================================================
auto, register은 stack 영역에 들어오기 때문에, 처음에 들어온 변수보다 나중에 들어온 변수가 더 스택의 위 쪽에 위치하고 있으므로, 그 위에부터 접근함.
가장 가까운 블록의 변수에 접근.