행복한 연어의 이야기

(윈도우 시스템) 3. 64비트 기반 프로그래밍 본문

IT/윈도우 시스템 프로그래밍

(윈도우 시스템) 3. 64비트 기반 프로그래밍

해피살몬 2021. 7. 23. 21:40

1. WIN32 vs WIN64

64비트와 32비트 차이

한번에 전송 및 수신 할수 있는 데이터 크기와 한번에 처리 할 수 있는 데이터 크기를 기준으로

32 비트 컴퓨터와 64비트 컴퓨터가 나뉘게 된다.

 

32비트와 64비트 프로그램 구현

32비트 컴퓨터 기준으로 int long 포인터 모두 4바이트 였다.

하지만 64 비트와는 조금 다르고 어떤 데이터 표현 모델을 따르냐에 따라 조금 더 달라진다.

bit 운영체제 int long 포인터
32 bit   4byte 4byte 4byte
64 bit Windows(LLP64) 4byte 4byte 8byte
UNIX(LP64) 4byte 8byte 8byte

int 의 크기는 같지만 long 과 포인터의 크기가 달라지는 것을 확인 할수 있다.

그래서 다음과 같은 코드가 문제를 일으킬 수 있다.

int vlaue;
int* pointer;

value = (int)pointer;

위 코드는 32 비트 컴퓨터에서는 int 와 포인터의 크기가 같기에 문제가 발생하지 않지만

64 비트 컴퓨터에서는 각각 4바이트와 8바이트로 크기가 달라 문제가 발생할 수 있다.

이를 해결하기 위해 이전 장 (윈도우 시스템) 2. 아스키코드 vs 유니코드

에서 공부했던 typedef 를 활용하면 좋다.(DWORD 같은 자료형)

 

2. 오류 확인

GetLastError 함수와 에러코드

오류가 발생했을때 GetLastError 함수를 호출하면 오류의 원인에 해당하는 에러메세지를 얻을 수 있다.

에러코드 테이블 값을 반환하며 에러코드 테이블은

MSDN 에서 확인할 수 있다.

 

알고 넘어가야할 것

1. 64 비트 시스템과 32 비트 시스템 차이

2. 주소값 표현에서 바이트가 지니는 의미

3. LLP64와 LP64

4. GetLastError 함수의 사용방법

 

'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.

 

Comments