변수와 storage class

juyoung·2021년 9월 16일
0

변수명 작성 규칙

  • 영문자, 숫자, under bar를 사용할 수 있다.
  • 첫 글자에는 숫자가 올 수 없다.

기억 클래스 (Storage Class)

변수를 메모리 내에 어디에 저장할 지를 결정하는 작업

  1. auto
    말 그대로 따로 기억 클래스를 지정하지 않으면 자동으로 auto 클래스로 지정이 된다.
    함수나 블록의 내에서만 유효하며, 범위를 벗어나면 자동으로 소멸됨.
    메모리의 스택영역에 저장된다.

  2. register
    변수를 메모리에 저장하는 것이 아니라, cpu내의 레지스터에 저장함.
    함수나 블록 내에서만 유효하며, 범위를 벗어나면 자동으로 소멸된다.
    cpu가 코드를 처리할 때 메모리에서 레지스터로 변수 값들을 읽어오는 과정을 거치는데, 이러한 과정을 생략할 수 있으므로 처리속도가 빨라진다.
    레지스터가 꽉차 레지스터에 변수를 잡을 수 없는 경우 auto로 처리됨.
    메모리가 아닌 레지스터에 저장되므로 메모리 주소를 구하는 &연산자 사용불가.

  1. static
    함수나 블록 외부에서도 값이 소멸하지 않는다.
    초기화 생략 시 자동으로 0으로 초기화 됨.(추측, 데이터 영역에 저장되니까..?)
  • 내부 정적변수: 함수나 블록 내에서 정적 변수가 선언됨. 따라서 변수 선언 범위 내에서만 사용가능.
  • 외부 정적 변수: 함수나 블록 외부에서 선언. 글로벌 변수랑 다른점이...?
  1. extern
    외부변수.
    외부의 코드파일에서 변수를 참조할 수 있는 기억클래스이다.

cf) global변수에 static과 extern을 사용하는 목적

  • static int sg =7;
    : 현재 파일에서만 사용하는 sg라는 글로벌 변수를 선언, 다른 파일에서 같은 이름의 sg라는 글로벌 변수를 사용하더라도 둘은 다르게 처리됨.
  • extern int eg = 7;
    : 외부파일과 공유하는 eg라는 글로벌 변수. 다른 파일의 코드가 eg를 업데이트하면 현재파일에서도 업데이트가 반영된다.(당연함. 같은 메모리 공간을 바라보고 있으므로)

요약

  • 변수명 작성 규칙
    : 영 대소문자, 숫자, under_bar를 사용할 수 있다. 단, 첫 문자에 숫자는 불가능
  • 기억 클래스(storage class)
    • auto: 기본 설정
    • register: cpu 내 레지스터에 저장
    • extern: 외부변수, 외부파일에서 정의된 변수를 reference
    • static: 프로세스 종료 전까지 변수가 살아 있음. scope 내부에서만 사용가능.

0개의 댓글