티스토리 뷰

안녕하세요, IT디자이너입니다.

 

이번에는 C언어의 지역변수와 전역변수 및 static register 변수에 대해서 소개해드리겠습니다.!

 

1. 지역변수

지역변수는 여러분이 자연스럽게 많이 사용해왔던 변수입니다. { } (중괄호) 안에 선언된 모든 변수들은 지역변수의 특징을 가지고 있습니다.

 

즉, main() 함수 안에 선언된 변수도 마찬가지인데요, 지역변수는 다른 함수에서는 사용이 불가능하고, 이러한 변수 및 함수들은 스택(Stack)이라는 메모리 구조에 저장이 됩니다. 즉, 지역변수가 위치한 함수가 종료되었을 때 메모리 해제가되어 해당 함수 및 변수는 소멸합니다.!!! 

// (메모리 구조 내용은 추후 포스팅에 상세하게 설명드리도록 하겠습니다.)

 

또한 매개변수도 지역변수의 특징을 가지고 있습니다. 이러한 개념을 숙지하시고 코딩을 하시게 되면은 많은 도움이 됩니다.!

 

2. 전역변수

전역변수는 지역변수와 반대로 {}(중괄호) 밖에 선언된 변수입니다. 프로그램 전체 영역 어디서든 접근이 가능합니다.

 

또한 프로그램이 종료될 때 까지 컴퓨터 메모리에 존재합니다. 

 

int num = 10;


int main(){

 num = 5;
 
 printf("%d",num);

 return 0;
}

위 코드처럼 함수 밖에서 변수가 초기화가 되었고 다른 함수에서 전역변수에 접근하여 다른 데이터를 대입하여 사용도 가능합니다.

 

또한 전역변수의 특징은 이것만이 아닙니다.!

 

int num = 10;


int main(){

 int num = 10; // <- 전역변수 num이 아닌 지역변수 num을 별도로 초기화하여 사용 가능
 
 printf("%d",num);

 return 0;
}

전역변수를 사용하지 않고 동일한 이름의 지역변수를 초기화 하여 사용이 가능하고 이러한 지역변수는 전역변수에 영향을 주지않고 온전하게 사용이 가능합니다.

(하지만 가시성을 위해 최대한 다른 이름을 사용하는게 좋겠죠?)

 

3. static변수

static을 지역변수에 사용할 경우 전역변수의 특징 중 하나인 프로그램이 종료될 때 까지 메모리상에 남아있는 특징을 갖게됩니다.

 

static 변수를 활용한 함수

위 사진 처럼 static 변수를 이용해서 함수가 종료되어도 메모리상에 남아있어 값이 증가하는 것을 볼수 있게됩니다.

 

만약 전역변수에서 static을 사용하게 될 경우에는 다른 파일에서 해당 변수에 접근하는 것을 막아주게됩니다.!!!

 

4. register 변수

register라는 이름을 많이 들어보셨을 겁니다.! CPU내에 존재하는 빠르고 비싼 메모리입니다.!!!! 즉 변수를 우리가 직접 CPU 내에 register에 메모리에 올라갈 수 있는 확률을 높이는 겁니다. 여기서 중요한 것은 확률입니다.!!!!!

 

변수앞에 register를 선언한다고 하여 무조건적으로 CPU register에 선언되는 것은 아니며, 컴파일러가 효율적이고 합당하다면은 우선적으로 register 메모리를 할당합니다.!! 그러면 연산속도가 다른 변수에 비해 상대적으로 빠르겠죠?

 

간혹 전역변수를 register를 사용하여 초기화하고 싶어하는 경우도 있을텐데요, register라는 리소스는 적고 비쌉니다. 그렇기 때문에 프로그램이 종료할 때 까지 계속 자리만 차지하는 전역변수에 regiser를 사용하는 것은 비효율적이겠죠?

 

최대한 전역변수에 사용하지 않는 편이 좋습니다.!

 


지역변수와 전역변수의 개념을 알게되면은 코드 작성시 조금 더 생각하는 폭이 넓어지실 겁니다.!!!

 

감사합니다.!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함