static 관련 정리

2023. 7. 9. 13:22c,c++/c++ 관련 개념 및 문법

static은 한번 메모리가 선언되면 data영역에 저장되며 이것은 프로그램과 lifetime을 같이 한다는 것을 알 수 있다.

함수가 여러 번 호출되어도 이미 존재하는 영역에 접근하여 처리를 해주므로 메모리 측면에서 효율적이다.

즉 값이 보존되며 계속해서 쓸 수 있다.

 

coroutines의 구현에 도움이 된다.

coroutine이란 기존의 caller callee구조인 함수를 한번 호출하면 stack에 올려서 return을 받아오는 구조에서
caller와 coroutine 사이에서 만약 coroutine에서 suspend를 한다면 현재 coroutine state를 heap영역에 저장하여 보관해뒀다가 caller에서 resume을 하게 되면 heap에서 저장된 state를 가져와서 다시 coroutine을 실행하는 것을 말한다.
큰 데이터를 읽을 때 모두 읽는 것은 너무 오래 걸리고 또 단계별로 읽고 싶을 수 있다. 그럴 때 coroutine을 이용하여 필요할 때마다 보관해뒀다가 이용하면 편리하게 쓸 수 있다.

static은

  • function안에 있는 static 변수
  • class안에 있는 static 변수

로 볼 수 있다. function안에 있는 static 변수는 메모리의 특정 구역에 저장되어서 프로그램의 lifetime까지 같이 살아있게 된다. 

class안에 있는 static 변수는 개체끼리 공유된다. 즉 class의 대표로 하는 변수가 된다. 
class에서 static 변수를 선언할 경우, 초기화는 블록의 외부에서 해주어야 한다. 외부에서 초기화 하지 않는다면 linker 에러가 뜨게된다. 

 

static은 외부파일에서 접근하지 못하도록 하는 것이 목적이다. static을 헤더파일에 넣으면 헤더파일이 copy를 원칙으로 모두 복사해주기 때문에 정의가 중복될 수 있다. 외부파일에 접근하고 싶다면 exturn 키워드를 이용하자

 

static 변수는 static 함수로 호출할 수 있다. 왜냐하면 어떠한 객체도 해당 static 변수를 가지고 있지 않고 있기 때문이다. 그냥 멤버 변수를 이용하면 누구의 변수인지 모른다.

 

'c,c++ > c++ 관련 개념 및 문법' 카테고리의 다른 글

explicit 키워드, mutable 키워드  (0) 2023.07.11
함수 포인터  (0) 2023.07.09
nested class, types..  (0) 2023.07.09
l-value, r-value  (0) 2023.07.09
익명 객체  (0) 2023.07.09