상세 컨텐츠

본문 제목

03. WIN32 vs WIN64

Programming/Windows System

by RACC8N 2020. 3. 18. 15:54

본문

CPU는 I/O 버스를 통해서 데이터를 외부로 전송하기도 하고, CPU 내부로 수신하기도 한다. 이때 한 번에 전송 및 수신할 수 있는 데이터의 크기에 따라서 32비트 시스템과 64비트 시스템이 나뉘게 된다.

즉 CPU가 버스를 통해서 한 번에 전송 및 수신할 수 있는 데이터의 크기가 32비트면 32비트 컴퓨터, 64비트면 64비트 컴퓨터가 된다.

 

또 하나의 기준은 데이터 처리능력이다. CPU는 외부로부터 들어오는 데이터를 처리해야 하는데, 32비트 컴퓨터는 한 번에 32비트 데이터를, 64비트 컴퓨터는 한 번에 64비트 데이터를 처리할 수 있다.

 

"한 번에 송·수신 할 수 있는 데이터 크기와 한 번에 처리할 수 있는 데이터 크기를 기준으로 32비트 컴퓨터와 64비트 컴퓨터를 구분 짓는다."

 

32비트 : int, long, 포인터 모두 4바이트

64비트 : 

운영체제 모델 char short int long 포인터
Windows LLP64 1바이트 2바이트 4바이트 4바이트 8바이트
UNIX LP64 1바이트 2바이트 4바이트 8바이트 8바이트

"64비트 시스템에서는 포인터가 지니고 있는 주소값을 4바이트 정수형으로 형 변환하지 말자" 

 

Windows 스타일 자료형

WINDOWS 자료형 의미 정의 형태
BOOL Boolean variable typedef int BOOL
DWORD 32-bit unsigned integer typedef unsigned long DWORD
DWORD32 32-bit unsigned integer typedef unsigned int DWORD32
DWORD64 64-bit unsigned integer typedef unsigned _int64 DWORD64
INT 32-bit signed integer typedef int INT
INT32 32-bit signed integer typedef signed int INT32
INT64 64-bit signed integer typedef signed _int64 INT64
LONG 32-bit signed integer typedef long LONG
LONG32 32-bit signed integer typedef signed int LONG32
LONG64 64-bit signed integer typedef signed _int64 LONG64
UINT Unsigned INT typedef unsigned int UINT
UINT32 Unsigned INT32 typedef unsigned int UINT32
UINT64 Unsigned INT64 typedef unsigned _int64 UINT64
ULONG Unsigned LONG typedef unsigned int ULONG
ULONG32 Unsigned LONG32 typedef unsigned int ULONG32
ULONG64 Unsigned LONG64 typedef unsigned _int64 ULONG64

[기본 자료형에 대한 마이크로소프트의 정의]

 

WINDOWS 자료형 의미 정의 형태
PINT INT32에 대한 포인터 typedef int* PINT
PINT32 INT32에 대한 포인터 typedef signed int* PINT32
PINT64 INT64에 대한 포인터 typedef signed _int64* PINT64
PLONG LONG에 대한 포인터 typedef LONG* PLONG
PLONG32 LONG32에 대한 포인터 typedef signed int* PLONG32
PLONG64 LONG64에 대한 포인터 typedef signed _int64* PLONG64
PUINT UINT에 대한 포인터 typedef unsigned int* PUINT
PUINT32 UINT32에 대한 포인터 typedef unsigned int* PUINT32
PUINT64 UINT64에 대한 포인터 typedef unsigned _int64* PUINT64
PULONG ULONG에 대한 포인터 typedef ULONG* PULONG
PULONG32 ULONG32에 대한 포인터 typedef unsigned int* PULONG32
PULONG64 ULONG64에 대한 포인터 typedef unsigned _int64* PULONG64

[포인터에 대한 Windows 정의]

 

이것만은 알고 갑시다

 

1. 64비트 시스템과 32비트 시스템의 구조적 차이

64비트 시스템과 32비트 시스템을 구분 짓는 기준 두가지는 "한 번에 송/수신 할 수 있는 데이터의 크기" 와 "한 번에 처리할 수 있는 데이터의 크기"이다.  

 

2. 주소값 표현에 사용되는 바이트 수가 지니는 의미

프로그래머 관점에서 64비트 시스템은 주소를 표현하는 데 64비트를 활용한다는 데 초점이 맞춰진다. 64비트 시스템은 한 번에 처리할 수 있는 데이터가 64비트이므로, 주소값을 표현하는 데도 64비트를 활용한다. 

 

3. GetLastError()

이 함수를 통해 오류의 원인을 알 수 있다. MSDN 참고.

관련글 더보기

댓글 영역