32비트 컴퓨터, 64비트 컴퓨터란?

2023. 4. 9. 02:16·컴퓨터 공학(Computer Science)

Window OS를 설치할때 32비트 혹은 64비트 윈도우를 설치할 것인지 사용자에게 묻는다.

본인이 중학생, 고등학생때는 64비트? 더 높으니까 32비트보다는 좋아보여서,

그리고 32비트 윈도우에서는 RAM을 4GB밖에 인식을 못하니, 64비트 윈도우를 '무지성'으로 설치했던 기억이 있다.

 

그렇다면, 32비트 윈도우에서는 왜 메모리를 4GB밖에 인식하지 못할까?

라는 의문이 컴공과 2학년이 되어서야 들기 시작했다..

그 이유를 알고자 전공책과 구글서치를 한 결과를 포스팅하려한다.


32비트 CPU

우선, 우리가 현재 사용하고 있는 CPU는 크게 2가지로 나뉜다.

  • 32비트 CPU
  • 64비트 CPU

레지스터는 CPU가 처리할 데이터들을 잠깐 담아두는 일종의 메모리이다.

32비트 CPU는 한번에 최대 32비트의 데이터를 처리할 수 있으며, 레지스터 또한 32비트의 데이터를 담아 둘 수 있다.

즉, 한번에 32비트(2의 32승), 약 40억까지 표현할 수 있다는 뜻이다.

 

CPU는 메모리에서 데이터를 가져오는데, 그전에 메모리의 주소를 알아야한다.

32비트 CPU는 최대 2의 32승까지 표현할 수 있기 때문에, 0~2의32승 까지의 메모리주소만 접근 가능 하다.


4GB의 메모리만 인식하는 이유

일단 데이터의 단위에 대해서 살펴보자.

  • Bit : 1 또는 2
  • Byte : 8Bit = 2^3
  • KB : 1024Byte = 2^10 * Byte
  • MB : 1024KB = 2^20(mega) * Byte
  • GB : 1024MB = 2^30(giga) * Byte

만약, 32비트 컴퓨터라면

메모리주소의 공간이 1Byte이고, 0부터 2^32개의 메모리 주소를 읽을 수 있기때문에

총 2^32 * 1Byte 의 용량을 사용할 수 있다.

 

그리고 2^32는 2^2 * 2^30으로 나타낼 수 있으며,

2^30은 GIGA로 표현된다. 그러면, 2^2 * 2^30 = 4 * GIGA이다.

 

즉, 2^32 * 1Byte는 4 * GIGA * 1Byte이므로,

4GB가 되는 것이다.

 

만약, 이 이상의 메모리를 장착한다면 CPU가 처리할 수 있는 메모리주소를 넘기 때문에,

인식하지 못한다.

 

64비트 컴퓨터도 같은 방식으로 계산해보면 된다.


C언어에서 포인터의 sizeof

만약, C언어에서 포인터를 선언하고 그 포인터 변수를 sizeof함수로 계산하면,

어떻게 될까?

#include <stdio.h>

int main(void) {
    int *p; //포인터 변수
    int size;

    size = sizeof(p);
    printf("%d\n", size);

    return 0;
}

결과는 8이 출력된다.

왜 포인터 변수의 크기가 8일까?

sizeof의 반환값은 byte단위이다.

8이 출력되었다는 것은, 8byte라는 뜻이다.

그렇다면 왜 포인터 변수의 sizeof의 값은 8byte일까?

64Bit 컴퓨터라고 가정해보자

64비트 컴퓨터는 한번에 64비트의 데이터를 처리할 수 있다.

즉, 0~2^64의 메모리 주소에 접근할 수 있다.

그것은, 2^64개의 수를 표현할 수 있는 변수가 필요하다는 뜻으로 8Byte라면 가능하기 때문에

메모리 주소를 가리키는 포인터 변수의 크기는 8Byte되어야 한다.

 

틀린 부분이 있다면 지적해주세요)

'컴퓨터 공학(Computer Science)' 카테고리의 다른 글

정적 링킹(Static Link), 동적 링킹(Dynamic Link), 그리고 컴파일  (2) 2024.06.24
책 - 그래서 컴퓨터는 어떻게 동작하나요? 후기  (3) 2023.06.19
버퍼(Buffer)란?  (0) 2023.04.17
'컴퓨터 공학(Computer Science)' 카테고리의 다른 글
  • 정적 링킹(Static Link), 동적 링킹(Dynamic Link), 그리고 컴파일
  • 책 - 그래서 컴퓨터는 어떻게 동작하나요? 후기
  • 버퍼(Buffer)란?
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Branch
    백준
    포인터
    Qualcomm
    순환
    자료구조
    INIT
    파이썬
    커널
    Git
    드라이버 분석
    커널 기여
    rubik pi
    스택
    c언어
    리눅스
    arm
    앤드류모튼
    동적메모리
    토발즈
    소수
    이진 트리
    버퍼
    피보나치
    파일 입출력
    C++
    commit
    rubikpi3
    시스템콜
    yolo
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minu Jin
32비트 컴퓨터, 64비트 컴퓨터란?
상단으로

티스토리툴바