변수의 존재기간과 접근범위 1: 지역변수

전역변수와 지역변수의 차이점

  • 메모리상에 존재하는 기간
  • 변수에 접근할 수 있는 범위

지역변수

  • ‘지역’이란 중괄호에 의해 형성되는 영역
  • 중괄호 내에 선언되는 변수는 모두 지역변수
  • 지역변수는 해당 지역을 벗어나면 자동으로 소멸
  • 지역변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않음
  • 지역변수는 반복문이나 조건문에도 선언이 가능

지역변수의 할당과 소멸

  • 지역변수는 '스택(Stack)'이라는 메모리 영역에 할당
  • 지역변수는 접시에 쌓듯이 할당
  • 지역변수는 해당 선언문이 실행될 때 메모리 공간에 할당되었다가, 선언문이 존재하는 함수가 반환을 하면(종료를 하면) 메모리 공간에서 소멸

지역변수의 일종인 매개변수

  • 선언된 함수 내에서만 접근이 가능
  • 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸

 

변수의 존재기간과 접근범위 2: 전역변수, static 변수, register 변수

전역변수

  • 처음 실행되면 메모리 공간에 할당되어서 프로그램이 종료될 때까지 메모리 공간에 남아있는 변수
  • 별도의 값으로 초기화하지 않으면 0으로 초기화
  • 프로그램 전체 영역 어디서든 접근이 가능

전역변수와 동일한 이름의 지역변수가 선언되면?

  • 해당 지역 내에서는 전역변수가 가리워지고, 지역변수로의 접근이 이뤄짐

지역변수에 static 선언을 추가해서 만드는 static 변수

  • 선언된 함수 내에서만 접근이 가능하다. (지역변수 특성)
  • 딱 1회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재한다. (전역변수 특성)

보다 빠르게! register 변수

int SoSimple(void)
{
    register int num=3;
    .
    .
}
  • 위와 같이 선언이 되면 변수 num은 CPU 내에 존재하는 ‘레지스터'라는 메모리 공간에 저장될 확률이 높아짐
  • 레지스터: CPU 내에 존재하는 크기가 매우 작은 메모리 → 이 메모리에 저장된 데이터를 대상으로 하는 연산은 매우 빠름
  • 전역변수는 레지스터의 추가할 수 없다.

'C' 카테고리의 다른 글

포인터 변수  (0) 2025.03.12
배열의 이해와 배열의 선언 및 초기화 방법  (0) 2025.03.12
조건에 따른 흐름의 분기  (0) 2025.03.12
반복 실행을 명령하는 반복문  (0) 2025.03.12
printf, scanf  (3) 2025.03.12

+ Recent posts