ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 포인터의 크기는 어떻게 결정될까?
    Programming🧑‍💻/Cpp 2025. 2. 3. 23:48

    변수는 변수를 선언할때 지정한 타입에 따라 값을 저장하기 위해 사용할 수 있는 메모리의 양이 결정됩니다. 

    예를 들어 일반적인 경우 char 의 경우에는 1byte , int의 경우에는 4byte가 해당 변수를 위한 메모리 공간으로 할당됩니다. 

    그렇다면 포인터 자체의 크기는 어떻게 될까요?

     

    이 질문에 답하기 위해 간단한 C++ 코드를 작성하여 실행하면 32 비트 시스템에서는 모든 포인터가 4바이트, 64 비트 시스템에서는 모든 포인터가 8바이트로 출력됩니다. 비트 시스템은 뭐고 왜 이런 결과가 나오게 되는 걸까요?

    #include <iostream>
    using namespace std;
    
    int main() {
        // 다양한 타입의 포인터 선언
        int* intPtr;
        char* charPtr;
        double* doublePtr;
        long long* llPtr;
        
        // 각 포인터의 크기 출력
        cout << "int 포인터 크기: " << sizeof(intPtr) << " bytes" << endl;
        cout << "char 포인터 크기: " << sizeof(charPtr) << " bytes" << endl;
        cout << "double 포인터 크기: " << sizeof(doublePtr) << " bytes" << endl;
        cout << "long long 포인터 크기: " << sizeof(llPtr) << " bytes" << endl;
        
        return 0;
    }

     

    비트 시스템이란?

    비트 시스템이란 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미합니다.

    이는 마치 컴퓨터가 가진 '숟가락'의 크기와 같습니다.

    32비트 시스템은 한 번에 32비트(4바이트)를 처리할 수 있는 숟가락을, 64비트 시스템은 64비트(8바이트)를 처리할 수 있는 큰 숟가락을 가진 것과 같습니다.

     

    비트 시스템과 메모리 주소 범위 

    이 숟가락의 크기는 컴퓨터의 모든 부분에 영향을 미칩니다.

    특히 중요한 것은 CPU가 메모리와 대화할 때 사용하는 '주소 버스'입니다.

    주소 버스는 CPU가 메모리의 특정 위치를 찾아갈 때 사용하는 길과 같습니다.

     

    32비트 시스템에서는 이 길이 32개의 선으로 이루어져 있어, 최대 2^32개(약 43억)의 서로 다른 메모리 위치를 구분할 수 있습니다. 이는 총 4GB의 메모리까지만 직접 접근할 수 있다는 의미입니다.

    64비트 시스템에서는 이 길이 64개의 선으로 이루어져 있어, 이론적으로는 2^64개의 메모리 위치를 구분할 수 있습니다. 이는 실제로 우리가 현재 사용하는 메모리의 크기보다 훨씬 큰 용량입니다.

     

    이것이 바로 포인터의 크기가 시스템에 따라 달라지는 이유입니다.

    포인터는 메모리의 주소를 저장하는 변수이므로, 시스템이 사용 가능한 주소 범위를 모두 포함할 수 있는 공간이 필요합니다.

    32비트 시스템에서는 4바이트, 64비트 시스템에서는 8바이트가 필요한 것입니다.

     

    이는 마치 우편번호 시스템과 비슷합니다. 3자리 우편번호 체계에서는 3자리 숫자만 저장할 수 있는 공간이 필요하고, 5자리 우편번호 체계에서는 5자리를 저장할 공간이 필요한 것과 같은 원리입니다.

    'Programming🧑‍💻 > Cpp' 카테고리의 다른 글

    콜 스택 동작을 통해 알아보는 함수 호출  (0) 2025.02.04
    이중 포인터  (0) 2025.02.01
    포인터도 타입이 필요한 이유  (0) 2025.01.31
    변수와 포인터  (0) 2025.01.30

    댓글

Designed by Tistory.