LISTORY
[윈도우즈 시스템 프로그래밍]프로그램 구현 관점에서의 WIN32 vs WIN64 본문
뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다. 이번에는 프로그램 구현 관점에서의 WIN32 vs WIN64 부분에 대하여 정리하겠다.
⊙ YouTube 주소 ⊙ ☞프로그램 구현 관점에서의 WIN32 vs WIN64
프로그램 구현 관점에서의 WIN32 vs WIN64
⊙ 64비트 기반 프로그래밍
- 64비트 시스템을 고려한 프로그래밍
-자료형에 대하여 고려해야 한다.
- Windows는 LLP64 모델을 채택하고 있다.
사실, 자료형에서 WIN32에 비해 WIN64의 차이가 있는 것은 포인터가 8바이트로 처리된다는 것 뿐이다. 이는 호환성을 위해서이다.
그럼 64비트와 32비트가 공존할 때 생길 수 있는 문제는 무엇이 있을까?
예제 코드를 보겠다.
#include <stdio.h>
int main(void)
{
int arr[] = {0, };
int arrVal = (int)arr; // 데이터 손실이 발생할 수 있는 위치
...
return 0;
}
위의 예제 코드에서 arr 배열의 이름은 사실상 포인터이므로 8바이트로 처리가 된다.
이 배열을 int로 강제 형변환을 하는 코드를 볼 수 있다.
32비트에서는 int와 배열의 이름 모두 4바이트로 처리가 되므로 문제가 되지 않는다.
하지만 64비트에서는 8바이트로 주소값을 표현하다가 4바이트로 처리를 하게 되면 데이터 손실이 발생할 수 있다.
64비트에서는 절대 기본자료형으로 포인터를 캐스팅해서는 안된다.
⊙ Polymorphic 자료형
하나가 둘 이상의 특징을 가질 때 다형성을 지닌다고 한다. Polymorphic 자료형은 다형성을 지니는 자료형이다.
대표적인 Polymorphic 자료형
#if defined(_WIN64)
typedef __int64 LONG_PTR;
typedef unsigned __int64 ULONG_PTR;
typedef __int64 INT_PTR;
typedef unsigned __int64 UINT_PTR;
#else
typedef long LONG_PRT;
typedef unsigned ULONG_PTR;
typedef int INT_PTR;
typedef unsigned int UINT_PTR;
#endif
_WIN64 는 64비트 기반으로 프로그래밍 하겠다는 선언이다.
_WIN64가 선언되어 있다면, UINT_PTR은 unsigned __int64가 되고 그렇지 않다면 unsinged int 형이 될 것이다(다형성).
⊙ 오류의 확인
오류이 발생했다면 그 오류와 오류의 원인을 알아내야 한다.
오류를 알기 위해서 전역적으로 선언된 메모리 공간에 오류의 이유를 저장해둔다.
오류가 발생했을때마다 이 공간에 오류의 이유를 등록하기때문에 오류가 발생하면 전역공간에 있는 오류를 가져가 해석해야 한다.
이 전역공간에 접근을 도와주는 함수가 GetLastError() 함수이다. 이 함수에서 전달받은 값을 통해 오류를 알 수 있다.
'IT > 윈도우 프로그래밍' 카테고리의 다른 글
[윈도우즈 시스템 프로그래밍] 컴퓨터 구조의 접근방법(2) (0) | 2018.05.19 |
---|---|
[윈도우즈 시스템 프로그래밍] 컴퓨터 구조의 접근 방법(1) (0) | 2018.05.19 |
[윈도우즈 시스템 프로그래밍] WIN32 vs WIN64 (0) | 2018.05.15 |
[윈도우즈 시스템 프로그래밍] MBCS와 WBCS의 동시지원 (0) | 2018.05.12 |
[윈도우즈 시스템 프로그래밍] Windows에서의 유니코드(UNICODE) (0) | 2018.05.12 |