728x90

프로그래밍에서 변수와 함수는 프로그램의 여러 부분에서 데이터를 저장하고 작업을 수행하는 중요한 역할을 함

이들 변수와 함수는 심벌(symbol)로 표현되며, 그 범위(scope)에 따라 지역 심벌(Local Symbol)과 전역 심벌(Global Symbol)로 구분됨

지역 심벌(Local Symbol)

지역 심벌은 특정 블록이나 함수 내에서 정의되고 사용되는 식별자를 말함

이러한 심벌은 정의된 블록이 종료되면 더 이상 유효하지 않으며, 해당 블록 내에서만 접근할 수 있음

 

특징

  • 정의 위치: 함수나 블록 내부
  • 유효 범위: 정의된 블록 내에서만 유효
  • 메모리 할당: 스택(stack)에 할당되며, 블록이 실행될 때 할당되고 블록이 종료되면 해제됨

전역 심벌(Global Symbol)

전역 심벌은 프로그램 전체에서 접근 가능한 식별자를 말함

이들 심벌은 파일 범위 또는 프로그램 전체 범위에서 정의되며, 모든 함수에서 접근할 수 있음

 

특징

  • 정의 위치: 함수 외부, 보통 파일의 상단에 위치
  • 유효 범위: 프로그램 전체
  • 메모리 할당: 데이터 세그먼트(data segment)에 할당되며, 프로그램이 시작될 때 할당되고 종료될 때 해제됨

예시 코드로 보는 지역 심벌과 전역 심벌

int g_a = 1;               // 전역 변수
extern int g_e;           // 외부 변수
int func_a(int x, int y); // 함수 참조

// 함수 구현
int func_b()
{
    int m = g_a + 2;
    return func_a(m + g_e);
}

이 예제 코드에서 지역 심벌과 전역 심벌을 나눠서 설명하면 다음과 같음

 

전역 심벌

  • g_a
    • 정의: int g_a = 1;
    • 설명: 프로그램 전체에서 접근 가능한 전역 변수
  • g_e
    • 정의: extern int g_e;
    • 설명: 외부 파일에서 정의된 변수로, 링크 단계에서 실제 주소가 결정됨
  • func_a
    • 정의: int func_a(int x, int y);
    • 설명: 함수 프로토타입 선언으로, 실제 구현은 다른 곳에 있어야 함
  • func_b
    • 정의: int func_b() {...}
    • 설명: 프로그램 전체에서 접근 가능한 함수 정의

지역 심벌

  • m
    • 정의: int m = g_a + 2;
    • 설명: func_b 함수 내에서 정의된 지역 변수로, 이 함수 내에서만 유효함
      함수가 호출될 때 스택에 할당되고, 함수가 종료되면 해제됨

결론

지역 심벌과 전역 심벌은 각각의 범위 내에서 서로 다르게 관리되고 사용됨
지역 심벌은 함수나 블록 내에서만 유효하며 스택에 할당되고, 전역 심벌은 프로그램 전체에서 접근 가능하며 데이터 세그먼트에 할당됨
이러한 차이점을 이해함으로써 더 효과적으로 변수를 관리하고 프로그램을 작성할 수 있음

프로그래밍을 할 때, 변수와 함수의 범위를 명확히 이해하고 사용하는 것이 중요함
이를 통해 코드의 가독성과 유지보수성을 높일 수 있음

728x90

'Computer Science' 카테고리의 다른 글

정적 라이브러리와 동적 라이브러리  (3) 2024.07.24
링커의 심벌해석 대상  (3) 2024.07.24
링커란?  (0) 2024.07.17
컴파일 언어와 인터프리터 언어 비교  (0) 2024.07.10
Brute force(브루트 포스)란?  (0) 2024.07.09

+ Recent posts