본문 바로가기
프로그래밍/공부

[C++] 정적(Static) 변수

by Sik.K 2022. 12. 13.

일반적으로 변수라고 하면 지역 변수와 전역 변수를 떠올린다.

 

그렇다면 정적 변수는 무엇일까?

 

정적 변수를 선언하면 특정 함수 내에서 선언을 하게 되는데, 이 경우에 변수는 전역 변수와 성격이 비슷해진다.

 

하지만 절대적으로 다른 것이 있다면 전역 변수는 어디서든 접근이 가능하지만 정적 변수는 지역 변수 내에서만 접근이 가능해진다.

 

저 글만 보면 지역 변수랑 다를 것이 없어 보인다. 하지만 코드로 직접 확인해 보면 어떤 느낌인지 알 수 있다.

 

#include <iostream>

using namespace std;

void Sub()
{
	static int num1 = 0;
	int num2 = 0;
	++num1;
	++num2;
	cout << "static : " << num1 << " local : " << num2 << endl;
}

int main()
{
	for (int i = 0; i < 5; ++i)
	{
		Sub();
	}

	return 0;
}

이 경우 다음과 같은 결과를 보인다.

 

 

과연 어떻게 된 일일까? 일반적으로 우리는 함수 내에 선언된 지역 변수는 스택 메모리에 할당이 되고 이 스택 메모리는 호출된 함수가 소멸하면 자동으로 소멸한다.

 

하지만 정적 변수로 선언된 변수의 경우 메모리 할당 자체가 컴파일 이후 Main 함수가 호출되기 이전에 할당이 되기 때문에 스택에 쌓인 함수의 소멸과 상관 없이 존재하고 이 변수는 Main 함수가 종료되는 시점, 즉 프로그램이 종료되는 시점에 소멸된다.

 

때문에 Main 함수에서 함수를 반복적으로 호출하면 정적 변수로 선언된 num1의 값은 계속해서 상승하게 되는 것이다.

'프로그래밍 > 공부' 카테고리의 다른 글

[Game] Delta Time  (0) 2022.12.14
[C++] 싱글턴 패턴  (0) 2022.12.13
[C++] 비트 연산자  (0) 2022.12.13
[그래픽스] 더블 버퍼링(Double Buffering)  (0) 2022.12.12
[C++] 추상클래스 and 인터페이스  (0) 2022.12.12

댓글