뇌를 자극하는 윈도우즈 시스템 프로그래밍이라는 책과 해당 책의 저자이신 윤성우님의 강의를 통해 공부한 내용을 정리하는 글입니다.
64비트와 32비트의 구분 방법
⦁ 구분의 두 가지 기준
⦁ 한번에 송수신 가능한 데이터 크기 : CPU가 버스를 통해서 한 번에 전송 및 수신할 수 있는 데이터 크기
⦁ 데이터 처리 능력 : CPU가 한 번에 외부로부터 읽어들일 수 있는 데이터 크기(명령어를 포함해서)
프로그래머 입장에서의 64비트 컴퓨터
⦁ 32비트 → 64비트
⦁ 프로그램으로 표현할 수 있는 범위의 증가
⦁ 표현할 수 있는 메모리의 전체 크기
32비트 시스템에서는 포인터도 32비트이고, 64비트 시스템에서는 포인터가 64비트이다.
포인터가 크면 클수록 프로그래머에겐 유리하다. 그만큼 표현 가능한 주소의 값이 큰 것이기 때문이다.
예를들어 메모리는 1GB인데 4비트로만 주소값을 표현한다면, 메모리가 아무리 1GB라고 해도 16개의 주소만 활용할 수 있기 때문에 비효율적이다.
또 한가지 예로 32비트 시스템에서 64비트 주소체계를 사용한다고 가정하면 32비트씩 2번에 걸쳐서 버스 시스템이 전송을 해야하기 때문에 시스템의 성능 저하를 야기시킬 수 있다. 따라서 보편적으로 메모리는 클수록 좋되, 버스 시스템에서 한번에 전송할 수 있을 만큼만 큰 것이 성능에 도움이 된다.
그렇다면 주소의 표현 범위가 넓을수록 프로그래머에게 유리할까?
예를들어 총 활용 가능한 메모리 크기가 40바이트라고 가정했을 경우에 다음과 같은 프로그램을 실행하려고 한다.
int _tmain(void)
{
TCHAR str[100];
_tscanf(_T("%s"), str);
_tprintf(_T("%s"), str);
return 0;
}
UNICODE 매크로 정의 유무에 따라 TCHAR는 1바이트가 될 수도 있고, 2바이트가 될 수도 있다.
1바이트라고 가정해도 배열 str은 100바이트가 필요하다. 이때 총 활용 가능한 메모리 크기가 40바이트이므로 실행할 수 없는 프로그램이 되어버린다. 그렇기 떄문에 아래와 같이 프로그램이 수정되어야 실행이 가능하다.
int _tmain(void)
{
TCHAR ch;
do
{
_tscanf(_T("%c"), %ch);
_tprintf(_T("%c"), ch);
}while(ch != '\n');
return 0;
}
이 프로그램은 문자열의 끝을 만날때 까지 1바이트씩 읽어들이는 프로그램이다.
이처럼 메모리가 제한적인 상황에서는 위와 같은 문제점이 생길 수 있다.
가용 메모리의 크기가 커진 64비트의 경우는 기존의 32비트에 비해 이러한 문제점에서 비교적 자유롭다.
'윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 4장 - 컴퓨터 구조의 접근방법 (0) | 2021.07.21 |
---|---|
윈도우즈 시스템 프로그래밍 3장 - 프로그램 구현 관점에서의 WIN32 vs WIN64/오류의 확인 (0) | 2021.07.21 |
윈도우즈 시스템 프로그래밍 2장 - MBCS와 WBCS의 동시 지원 (0) | 2021.07.19 |
윈도우즈 시스템 프로그래밍 2장 - Windows에서의 유니코드(UNICODE) (0) | 2021.07.19 |
윈도우즈 시스템 프로그래밍 1장 - 프로그램의 실행과정/하드웨어 구성의 재접근 (0) | 2021.07.18 |