오다기리 박의 알고리즘 노트

3장. 64비트 기반 프로그래밍 본문

운영체제

3장. 64비트 기반 프로그래밍

오다기리 박 2018. 8. 8. 23:15

3장. 64비트 기반 프로그래밍

1. WIN32 vs WIN64


  • 64비트와 32비트

    • 분류 기준 : I/O버스에서 한 번에 송수신할 수 있는 데이이터의 크기, 한 번에 처리할 수 있는  데이터 크기

  • 프로그래머 입장에서의 64비트 컴퓨터



    • 4비트로 주소를 표현할 경우 메모리에 할당할 수 있는 주소값의 개수는 16바이트가 전부이기 때문에 사용할 수 있는 최대 메모리의 크기는 16바이트이다.

    • [32비트] 32비트 주소 표현을 할 경우 주소값의 이동 및 연산이 한 번에 이뤄지고 표현할 수 있는 주소의 범위가 4G바이트(2^32)가 되기 때문에 충분하다.

    • [64비트] I/O 버스가 64비트 단위로 자료를 전송하는 컴퓨터 세대를 가리키기도 하며 이를 64비트 컴퓨터라고도 부른다.

2. 프로그램 구현 관점에서의 WIN32 vs WIN64


  • LLP64 vs LP64

    • 32비트 환경에서 Windows는 int, long을 4바이트로 표현하는 식으로 기본 자료형과 포인터를 표현하였다.

    • 64비트 컴퓨터에서는 다음과 같이 표현

      -> LLP64 : 32비트 시스템과의 호환성을 중시한 모델

  • 64비트와 32비트 공존의 문제점


    • -> 62비트 컴퓨터에서는 포인터를 int, long 등 4바이트 정수형 데이터로 형 변환할 경우 데이터 손실이 발생할 수 있다.

  • Windows 스타일 자료형

    • 다른 시스템으로의 이식성을 고려한다면 기본 자료형을 사용하거나 프로젝트의 성격 및 특성에 맞게 새로운 이름으로 자료형을 정의하는 것이 좋은 방법이다. 다만 Windows 기반에서의 실행만 고려한다면, MS에서 정의하고 있는 자료형을 사용하는 것도 좋다.

  • 다형적 자료형

    • PTR : 32비트 시스템과 64비트 시스템의 포인터 크기가 다르기 때문에 발생할 수 잇는 문제를 해결하기 위해 등장한 자료형


3. 오류의 확인

  • GetLastError() 로 오류 확인하기

    • 오류 확인은 오류가 발생한 직후에 바로 한다.

    • Windows 시스템 함수가 호출될 때마다 GetLastError함수가 반환하는 에러코드는 갱신된다.