정글

정적 전역 변수

nkdev 2025. 4. 29. 11:16

malloc 구현하다가 포인터가 static으로 구현되어 있길래 정리하고 넘어가는 포스팅

 

 

static

  • 정적 전역 변수
  • 자신이 선언된 소스파일 안에서만 사용할 수 있음
  • static으로 선언된 변수를 다른 파일에서 extern으로 가져다쓸 수 없음 → 컴파일(링크) 에러 발생
  • 즉, 전역 변수에 static을 붙이면 변수의 사용 범위를 파일 범위로 제한하는 효과가 있음
//main.c
#include <stdio.h>
extern int num1; //컴파일 에러. num1을 사용할 수 있는 범위는 print.c파일 내부
int main(){
	...
	return 0;
}
//print.c
#include <stdio.h>
static int num1 = 10; //static으로 선언했으므로 print.c파일 외부에서 사용 불가
void print(){
	...
}

 

 

변수를 함수 외부에 static으로 선언하면 정적 전역 변수가 되고

함수 내부에 static으로 선언하면 정적 지역 변수가 된다.

 

정적 전역 변수로 선언하는 이유는 파일 내의 어떤 함수에서든 해당 변수에 접근하고 변경할 수 있게 하기 위해서

정적 지역 변수는 파일 내의 특정 함수에서만 해당 변수에 접근하고 변경할 수 있게 하기 위해서

 

또한 정적 전역 변수는 같은 파일 안에서는 여러 함수가 접근할 수 있지만, 다른 파일에서 extern으로 끌어다 쓰지 못한다.

즉 모든 함수가 공유해야 하지만 외부 파일에는 노출시키고 싶지 않은 경우 사용한다.

 

static은 접근 범위를 해당 파일 내부로 제한하여 외부로부터 구현 디테일을 숨기고싶을 때(encapsulation) 사용한다는 점을 알 수 있었다!


 

mm.c파일 내에 heap_listp 포인터가 함수 외부에 전역으로 선언되어있고, static이 붙어있음

 

/* global variable & functions */
static char* heap_listp;

 

이제 코드를 해석하면서 이 정적 전역 변수가 어떤 용도로 쓰이는지 알아볼 예정

 

 

ref :

https://dojang.io/mod/page/view.php?id=690

 

 

 

'정글' 카테고리의 다른 글

에코 서버(1) - 호스트와 서비스 변환  (0) 2025.05.05
CGI  (0) 2025.05.05
RBTree 정리  (0) 2025.04.18
포인터.. 왜 쓸까?  (2) 2025.04.18
Data-Structures Binary Search Tree Q4 - Post Order Iterative 풀이  (2) 2025.04.17