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 |