ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 변수
    카테고리 없음 2023. 5. 2. 22:19

    지역 변수

    지역 변수는 함수 내부에서 선언되고 사용되는 변수

    • 함수 또는 블록 내부에서 선언된다. 선언된 블록 내에서만 접근 가능
    • 메모리의 스택에 저장된다. 코드 블럭의 끝 지점을 만나면 해제된다.
    • 선언된 함수, 블록 내에서만 접근 가능.
    • 지역 벽수는 자동으로 초기화 되지 않는다.
    #include <iostream>
    
    void exampleFunction() {
        int localVar = 5; // localVar is a local variable
        std::cout << "Local variable value: " << localVar << std::endl;
    }
    
    int main() {
        exampleFunction();
        // localVar cannot be accessed here, as it's limited to the scope of exampleFunction()
        return 0;
    }

    전역 변수

    전역 변수는 프로그램의 전체 영역에서 접근이 가능한 변수

    • 함수 외부에서 선언된다.
    • 전역 변수는 DATA 영역에 저장된다. (초기화 되면 DATA, 아니면 BSS)
    • 프로그램의 시작부터 종료까지 메모리에 유지되고, 종료될 때 해제된다.
    • 프로그램의 모든 함수, 클래스에서 접근 가능하다.
    • 명시적으로 초기화되지 않으면 컴파일러에 의해 자동으로 0 또는 nullptr로 초기화된다.
    • 다른 소스 파일에서도 접근할 수 있다. 'extern' 키워드를 사용해야함.
    #include <iostream>
    
    int globalVar = 10; // globalVar is a global variable
    
    void displayGlobalVar() {
        std::cout << "Global variable value: " << globalVar << std::endl;
    }
    
    int main() {
        displayGlobalVar(); // Global variable value: 10
        globalVar = 20;
        displayGlobalVar(); // Global variable value: 20
        return 0;
    }

    정적 변수

    정적 변수는 프로그램 실행 동안 값이 유지되는 변수

    • 함수 또는 클래스 에서 선언될 때 해당 함수나 클래스에서만 접근 할 수 있다.
    • 프로그램 전체 실행 시간 동안 존재하며, 초기화 되는 시점에 메모리가 할당되고 종료시 해제된다.
    • 명시적으로 초기화하지 않으면 자동으로 0으로 초기화된다. 변수 선언 시점에 단 한 번만 이루어진다.
    • 함수 호출 사이에서 값을 유지한다. 함수 종료 후에도 메모리에 유지되기에 다음 함수 호출에도 이전 값이 그대로 사용된다.
    • 전역 변수화 함께 저장되며, 프로그램의 실행 시간 동안 메모리가 유지된다. (BSS or DATA 영역)
    • 사용범위에 따라 정적 지역변수, 정적 전역변수로 나뉜다.
    #include <iostream>
    
    // 정적 전역 변수 정의
    static int static_global_var = 0;
    
    void increment() {
        // 정적 지역 변수 정의
        static int static_local_var = 0;
    
        static_local_var++;
        static_global_var++;
    
        std::cout << "정적 지역 변수: " << static_local_var << std::endl;
        std::cout << "정적 전역 변수: " << static_global_var << std::endl;
    }
    
    int main() {
        increment(); // 첫 번째 호출
        increment(); // 두 번째 호출
        increment(); // 세 번째 호출
    
        return 0;
    }
    #include <iostream>
    
    class ExampleClass {
    public:
        static int staticVar; // 클래스 내부의 정적 변수
    };
    
    int ExampleClass::staticVar = 10; // 정적 변수 초기화
    
    int main() {
        ExampleClass obj1;
        ExampleClass obj2;
    
        std::cout << "Static variable in obj1: " << obj1.staticVar << std::endl; // Static variable in obj1: 10
        std::cout << "Static variable in obj2: " << obj2.staticVar << std::endl; // Static variable in obj2: 10
    
        obj1.staticVar = 20;
    
        std::cout << "Static variable in obj1: " << obj1.staticVar << std::endl; // Static variable in obj1: 20
        std::cout << "Static variable in obj2: " << obj2.staticVar << std::endl; // Static variable in obj2: 20
    
        return 0;
    }

     

    동적 변수

    프로그램 실행 도중 동적으로 메모리를 할당 받아 사용하는 변수

    • 메모리 힙 영역에 할당된다.
    • 포인터에 접근하며, 메모리 할당과 해제에 포인터를 사용한다.
    • 생명주기는 메모리가 할당된 시점부터 'delete' 연산자를 사용하여 명시적으로 해제될 때 까지이다.
    • 동적 변수가 해제되지 않은 상태에서 포인터가 덮여쓰여지거나 범위를 벗어나면, 메모리 누수가 발생할 수 있다.
    #include <iostream>
    
    int main() {
        int* dynamicVar = new int; // 동적 변수 할당
        *dynamicVar = 42; // 동적 변수 초기화
    
        std::cout << "Dynamic variable: " << *dynamicVar << std::endl; // Dynamic variable: 42
    
        delete dynamicVar; // 동적 변수 메모리 해제
        dynamicVar = nullptr; // 포인터 초기화
    
        return 0;
    }

    댓글

Designed by Tistory.