본문 바로가기

COMPUTER/기타

Static Variable 이 무엇일까?

드디어 립엪을 제출했다.. 이렇게 생명 연장++;

그 다음 과제를 하기에 앞서, 필요한 개념인 static variable 에 대해서 공부해 보았다.

 

* 참고 문헌 (?)

- Static variable [https://en.wikipedia.org/wiki/Static_variable]

 

# Static Variable

Static Variable은 문자 그대로 해석해보면, '정적인 변수', '고정된 변수'이다. Static Variable은 실제로 정적으로 고정되는 변수를 일컫는데, 간단하게 말하면 변수가 유지되는 시간이 프로그램이 돌아가는 시점과 동일하다. 즉 프로그램이 종료되면 해당 변수는 사라진다.

좌 : 메모리 구조 // 우 : scope와 extent

static variable은 그럼 어디에 저장될 까? static variable은 초기화가 되었을 때, 프로그램의 메모리 공간인 data segment에 저장되어지고, 초기화 되어지 않았을 경우 BSS segment에 저장된다. (상단 좌측 이미지 참고) BSS segment 는 메모리 공간에서 초기화 되지 않은 변수들이 저장 되는 공간을 일컫는다.

### Extent(life time) 과 Scope

extent와 scope는 무슨 차이가 있을까? extent는 변수가 의미있는 값을 가지고 있는 동안(시점)이다. 반면 scope는 해당 변수가 사용 될 수 있는 위치(범위)를 나타낸다. static variable의 extent는 프로그램이 돌아가는 동안 이지만, scope가 프로그램 전체가 아닐 수 있다. 우리가 흔히 '전역 변수(global variable)', '지역 변수(local variable)' 라고 부르는 것들은 scope 와 관련한 개념이다.  static variable에서도 scope와 관련해서 static global variable과 static local variable로 나눌 수 있는데, 이때 static local variable과 local variable에는 차이가 있다. static local variable은 함수가 몇번 시행이 되는지와는 관계 없이 딱 한번만 초기화 되고, 유지되고, 접근이 가능하다. 가장 흔한 예시로는 cnt를 들 수 있다고 한다.(상단 우측 이미지 참고) 그래서 개념 이해도 해볼 겸 코드를 짜 보았다.

### 예시 코드 && 실행 화면

#include <stdio.h>

void	Count(void)
{
	// static 변수 선언
	static	int cnt = 0;
	cnt++;
	printf("Count 함수가 %d번 시행되었습니다.\n", cnt);
}

int		main(void)
{
	Count();
	Count();
	Count();
	Count();
	Count();

	return (0);
}

해당 프로그램을 실행한 결과

 

+) 위키보면서, 이해해 보려고 이것저것 그리고, 코드 쳐본거라서 정확하지 않은 정보가 있을 수도 있다. 틀린게 있다면 제보바랍니다..

'COMPUTER > 기타' 카테고리의 다른 글

leaks로 Memory leak 체크하기  (0) 2020.11.09