- 우선 메모리 영역에 대한 이해가 필요
1. stack 영역 , heap(동적) 영역 , 정적 영역
2. static 키워드는 메모리에 해당 영역의 시작과 동시에 생성되었다. 프로그램이 끝나야 사라지는 정적 영역에 부여됨
static 변수
1. static 의 저장 기간을 가짐
- 함수내에서 선언된 static 변수는 해당 함수를 처음 호출할때 메모리에 올라가 프로그램이 끝날때 사라짐
- 전역 static 변수로 선언시에는 프로그램 시작시 메모리 영역(정적 영역)에 올라갔다 프로그램이 끝나면 사라진다.
- c++ 에서 class 내에 선언했을 때 프로그램이 시작시 생성되어서 프로그램이 끝날때 제거됨
2 . scope의 영향을 받음
- 전역변수 : file scope의 영향을 받으면 intenal linkage 라고 함
- internal linkage란 내부 연결성이라고 함. 즉 전역 static 객체나 함수는 link 단계에서 외부 바인딩이 일어나지 않음, 외부 파일에서는 내부 전역 static 객체/함수를 참조하거나 호출이 불가
- 지역변수 : block scope의 영향을 받는다.
- 클래스 멤버 변수 : 클래스 이름 공간의 영향을 받는 전역 객체
static 함수
1.일반함수 : internal linkage 를 갖는다. 외부 파일에서 해당 함수를 호출하지 못한다.
2.클래스 멤버 함수 : this 포인터를 갖지 않는다. 객체 멤버 변수나 멤버 함수를 직접 참조/호출 할수 없다. 단. 같은 클래스의 static 멤버 변수나 static 멤버 함수는 직접 참조/호출이 가능하다.