프로그래밍/C

Static

환승 2022. 2. 21. 12:43

Static in C language

  • static + Variable기본적으로 C언어에서 변수는 동적(Dynamic)변수로, 선언과 동시에 메모리에 할당이 된다.
  • 할당된 메모리는 전역변수일 경우 프로그램이 끝날 때, 지역변수일 경우 해당 블록이 끝날 때 해제가 된다.
 
💡그렇다면 static(정적) 변수는 메모리를 언제 할당하고, 언제 해제할까?

Static 변수의 경우, 프로그램의 처음 시작 때 초기화를 하고 프로그램이 끝날 때 해제한다.

 

  • Static + Function그러면 함수 앞에 static을 붙여보자.즉, .c 파일을 컴파일하여 .obj를 만든 후, linker에 해당 함수가 표시되지 않는다.
  • 프로젝트를 진행 중 각 파일에 중복된 함수명이 있어도 사용할 수 있어, 협업에 편하다.
  • static 함수는 해당 .c 파일에서만 사용 가능하게 된다.
 
💡static의 효용은 그러면 협업만을 위한 것일까?

 

질문을 바꿔보자, static은 왜 나왔을까?

사람들이 협동하기 위해서라면, cooperate, 혹은 독립된 것을 표현하기 위해 independent와 같은 표현을 쓰지 않았을까?

 

The Art of Readable Code (읽기 좋은 코드가 좋은 코드다)에서 말하는 것처럼,

코드는 사람이 이해하기 쉬워야한다.

 

그런 관점에서 정적 변수가 협업을 위한 것이라는 건 조금 애매하게 들린다.

static을 협업 용으로만 쓴다면, 단어 자체가 직관적이지 않다고 나는 본다.
'현 파일에서 정적(static)이니까 다른 파일에서 사용할 수 없는거 아니냐' 라고 한다면,,, 그렇게 이해해도,,, 😉

사실 말하고 싶은건 ‘정적이라는 단어가 어울리지 않다’가 아니라, ‘정적이라고 명명된 이유’이다.
이 이유는, 메모리 영역과 관련되어 있는 것 같다.

Static은 컴파일 중에 데이터 영역에 메모리를 할당한다.

반면, 동적 할당인 경우에는 런타임 중에 힙 메모리 영역에 메모리를 할당한다.

물론, 일반적인 변수 같은 것들은 함수의 호출과 함께 스택 메모리 영역에 할당된다.

 

 


정리를 하자면,,,

 
📌static은 미리 메모리가 할당되고, 이로 인해 성능 향상을 이끌 수 있다.

하지만, 요즘은 전반적인 성능이 워낙 좋아졌기 때문에 이로 인한 성능 향상이 와닿지 않을 수도 있다...