[C] static 변수

Binsu·2021년 9월 8일
0

C

목록 보기
1/3

static 변수

static 지역변수는 스택이 아닌 데이터 영역에 저장된다. 전역변수와 동일한 위치(데이터 영역), 동일한 시점(프로그램의 시작과 동시에)에 메모리로 올라간다. 메모리로 올라가면 프로그램이 종료될 때까지 공간을 차지한다. 아래 코드를 통해 이를 실험해볼 수 있다.

// static 지역변수
#include <stdio.h>
void CountFctCall(void);

int main(void)
{
    CountFctCall();
    CountFctCall();
    CountFctCall();

    return 0;    
}

void CountFctCall(void)
{
    static int cnt = 1;
    printf("This Function called %d. \n", cnt);
    cnt++;
}

// 일반 지역변수
void FunctionCall(void);

int main(void)
{
    FunctionCall();
    FunctionCall();
    FunctionCall();

    return 0;
}

void FunctionCall(void)
{
    int cnt = 1;
    printf("This Func called %d. \n", cnt);
    cnt++;
}

static 변수를 쓰는 이유

그렇다면 왜 전역변수를 놔두고 굳이 static 변수를 사용할까?
예를 들어, 전역변수처럼 계속해서 유지해야 하는 변수가 있는데 이 변수가 하나의 함수에서만 접근을 한다면 static 변수를 사용함으로써 전역변수의 특징은 그대로 남겨두면서, 언제 어디서나 접근이 가능하다는 단점은 제거할 수 있다. 결국, 상황에 맞게 활용하면 된다.
아래 그림을 보면 C 코드가 각각 메모리 영역의 어디에 할당되는지 알 수 있다.

0개의 댓글