64비트와 32비트 컴퓨터의 구분
64비트 컴퓨터 | 32비트 컴퓨터 | |
한 번에 처리 가능한 데이터의 크기 | 64 bit | 32 bit |
한 번에 송수신 가능한 데이터의 크기 | 64 bit | 32 bit |
포인터 (주소값 표현) 크기 | 64 bit | 32 bit |
최대 메모리 크기 | 16 TB | 4 GB |
LLP64
- 64비트 환경에서 Windows 가 기본 자료형과 포인터를 표현하는 방식 (리눅스의 경우 LP64)
char 1 byte
short 2 byte
int 4 byte
long 4 byte
float 4 byte
pointer 8 byte
long long 8 byte
double 8 byte
64비트 기반 프로그래밍 주의사항
- 64비트 시스템에서는 포인터를 8바이트로 표현
- int, long 등 4바이트 자료형으로 형 변환시 데이터 손실 발생
int n = 10;
int* p = &n;
int x = (int)&n;
printf("%d", x);
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
DW0RD64 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
Polymorphic 자료형
- 포인터 값 기반의 산술 연산을 위해 정의된 자료형
- 64비트와 32비트 컴퓨터에서 포인터의 크기가 다르기 때문에 발생할 수 있는 문제 해결
#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_PTR;
typedef unsigned long ULONG_PTR;
typedef int INT_PTR;
typedef unsigned int UINT_PTR;
#endif
Polymorphic 자료형의 사용
- 64비트에서 UINT_PTR 은 unsigned __int64
- 32비트에서 UINT_PTR 은 unsigned int
UINT_PTR GetDistance(UINT_PTR x, UINT_PTR y)
{
return x - y;
}
SIZE_T 자료형
typedef ULONG_PTR SIZE_T;
SIZE_T 자료형 출력 형식
_tprintf(_T("%zd"), sizeof(TCHAR));
BOOL 자료형
typedef int BOOL;
#define FALSE 0
#define TRUE 1
참고 자료
https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/standard-types?view=msvc-170
표준 형식
자세한 정보: 표준 형식
learn.microsoft.com
[MS-DTYP]: SIZE_T
SIZE_T is a ULONG_PTR representing the maximum number of bytes to which a pointer can point. This type is declared as
learn.microsoft.com
https://www.youtube.com/playlist?list=PLVsNizTWUw7E2KrfnsyEjTqo-6uKiQoxc
뇌를 자극하는 윈도우즈 시스템 프로그래밍
www.youtube.com
https://dojang.io/mod/page/view.php?id=787
C 언어 코딩 도장: Q & A
sizeof로 구조체의 크기를 구했더니 제가 정의한 구조체의 크기보다 큰 값을 반환합니다. 먼저 다음과 같은 구조체가 있습니다. struct Data { char mode; // 1바이트 int count; // 4바이트 }; char는 1바이트 in
dojang.io
'Windows' 카테고리의 다른 글
커널 오브젝트와 핸들 (0) | 2024.04.26 |
---|---|
표준 검색경로 (0) | 2024.04.11 |
프로세스 생성 (0) | 2024.04.10 |
오류 확인 (0) | 2024.04.09 |
MBCS / WBCS 동시 지원 (0) | 2024.04.02 |