전역변수

Jaemyeong Lee·2024년 6월 7일

C/C++

목록 보기
29/56

GPT

C/C++에서 전역 변수(Global Variable)에 대해 설명하고, 이를 이해하기 위한 다양한 방식을 설명하겠습니다.

1. 전역 변수 개요

전역 변수는 프로그램의 모든 함수와 블록에서 접근할 수 있는 변수입니다. 전역 변수는 함수나 블록 외부에 선언되며, 프로그램이 실행되는 동안 메모리에 상주합니다. 전역 변수는 프로그램 전체에서 공유되므로, 어떤 함수에서든 값을 읽고 쓸 수 있습니다.

2. 전역 변수 선언과 사용법

C에서의 전역 변수

#include <stdio.h>

// 전역 변수 선언
int globalVar = 10;

void function() {
    printf("globalVar inside function: %d\n", globalVar);
    globalVar = 20; // 전역 변수 값 변경
}

int main() {
    printf("globalVar inside main: %d\n", globalVar);
    function();
    printf("globalVar after function call: %d\n", globalVar);
    return 0;
}

C++에서의 전역 변수

#include <iostream>

// 전역 변수 선언
int globalVar = 10;

void function() {
    std::cout << "globalVar inside function: " << globalVar << std::endl;
    globalVar = 20; // 전역 변수 값 변경
}

int main() {
    std::cout << "globalVar inside main: " << globalVar << std::endl;
    function();
    std::cout << "globalVar after function call: " << globalVar << std::endl;
    return 0;
}

3. 컴퓨터 구조 및 운영체제 측면에서의 이해

메모리 할당

전역 변수는 데이터 세그먼트(또는 BSS 세그먼트)에 할당됩니다. 데이터 세그먼트는 프로그램이 시작될 때 할당되며, 프로그램이 종료될 때까지 유지됩니다.

메모리 구조:
+------------------+
|   코드 세그먼트   |
+------------------+
|   데이터 세그먼트 |
|   (전역 변수)    |
+------------------+
|   BSS 세그먼트    |
|   (초기화되지 않은 전역 변수) |
+------------------+
|   힙 세그먼트     |
+------------------+
|   스택 세그먼트   |
+------------------+

메모리 접근

전역 변수는 프로그램의 모든 함수와 블록에서 접근할 수 있습니다. 이는 전역 변수가 모든 함수와 블록에서 동일한 메모리 주소를 가지기 때문입니다. 전역 변수는 프로그램이 시작될 때 초기화되며, 프로그램이 종료될 때까지 유지됩니다.

성능 최적화

전역 변수는 함수 호출 시 재할당되지 않으므로, 스택 메모리를 절약할 수 있습니다. 그러나 전역 변수는 프로그램 전체에서 접근할 수 있으므로, 의도치 않은 값 변경이 발생할 수 있습니다. 따라서 전역 변수의 사용은 최소화하는 것이 좋습니다.

4. 그림과 삽화

전역 변수의 메모리 구조와 접근 방식을 이해하기 쉽게 그림과 표로 표현하였습니다.

전역 변수 선언:
int globalVar = 10;

메모리 구조:
+------------------+
|   코드 세그먼트   |
+------------------+
|   데이터 세그먼트 |
|   (전역 변수)    |
+------------------+
|   BSS 세그먼트    |
|   (초기화되지 않은 전역 변수) |
+------------------+
|   힙 세그먼트     |
+------------------+
|   스택 세그먼트   |
+------------------+

5. 예제 코드 확장

다양한 상황에서 전역 변수를 사용하는 예제를 추가로 제공합니다.

여러 함수에서 전역 변수 사용

#include <iostream>

// 전역 변수 선언
int globalCounter = 0;

void increment() {
    globalCounter++;
}

void decrement() {
    globalCounter--;
}

int main() {
    std::cout << "Initial globalCounter: " << globalCounter << std::endl;
    increment();
    std::cout << "globalCounter after increment: " << globalCounter << std::endl;
    decrement();
    std::cout << "globalCounter after decrement: " << globalCounter << std::endl;
    return 0;
}

전역 변수와 지역 변수의 이름 충돌

#include <iostream>

// 전역 변수 선언
int value = 100;

void function() {
    int value = 50; // 지역 변수 선언
    std::cout << "Local value inside function: " << value << std::endl;
    std::cout << "Global value inside function: " << ::value << std::endl; // 전역 변수 접근
}

int main() {
    std::cout << "Global value inside main: " << value << std::endl;
    function();
    return 0;
}

요약

전역 변수는 프로그램의 모든 함수와 블록에서 접근할 수 있는 변수로, 프로그램 시작 시 데이터 세그먼트에 할당되고 프로그램 종료 시까지 유지됩니다. 전역 변수는 메모리 사용 측면에서 효율적일 수 있지만, 프로그램 전체에서 접근할 수 있기 때문에 의도치 않은 값 변경의 위험이 있습니다. 따라서 전역 변수의 사용은 최소화하고, 필요할 경우 신중하게 사용해야 합니다. 운영체제는 전역 변수가 저장되는 메모리의 할당과 해제를 관리하여 프로그램이 효율적으로 전역 변수를 사용할 수 있도록 돕습니다.

이와 같은 내용을 통해 C/C++의 전역 변수에 대해 더 깊이 이해할 수 있을 것입니다. 추가로 궁금한 사항이 있으면 알려주세요!

profile
李家네_공부방

0개의 댓글