새 데이터 형식
64비트 Windows에는 고정 정밀도 데이터 형식, 포인터 정밀도 형식 및 특정 포인터 정밀도 형식의 세 가지 데이터 형식이 도입되었습니다. 개발자가 64비트 Windows를 준비할 수 있도록 이러한 형식이 개발 환경에 추가되었습니다. 이러한 형식은 기본 C 언어 정수 및 긴 형식에서 파생됩니다. 따라서 32비트 Windows에서 컴파일 및 테스트하는 코드에서 이러한 데이터 형식을 사용한 다음, 64비트 Windows를 대상으로 할 때 64비트 컴파일러와 다시 컴파일할 수 있습니다.
32비트 Windows만 대상으로 하는 애플리케이션의 경우에도 이러한 새 데이터 형식을 채택하면 코드가 더 강력해집니다. 이러한 데이터 형식을 사용하려면 잠재적으로 안전하지 않은 포인터 사용, 다형성 및 데이터 정의에 대해 코드를 검사해야 합니다. 예를 들어 변수가 ULONG_PTR 형식인 경우 산술 연산 또는 다형성에 대한 포인터를 캐스팅하는 데 사용할 것이 분명합니다. 이전 데이터 형식을 사용하여 이러한 사용량을 직접 나타낼 수 없습니다. 파생 형식 명명 또는 헝가리 표기법을 사용하여 간접적으로 이 작업을 수행할 수 있지만 두 기술 모두 오류가 발생하기 쉽습니다.
이러한 모든 데이터 형식은 BaseTsd.h에서 선언됩니다. 이러한 데이터 형식의 정의를 비롯한 자세한 내용은 Windows 데이터 형식을 참조하세요.
고정 전체 자릿수
고정 정밀도 데이터 형식은 32비트 및 64비트 Windows 모두에서 동일한 길이입니다. 이를 기억하기 위해 전체 자릿수는 데이터 형식의 이름에 속합니다. 다음은 고정 정밀도 데이터 형식입니다.
용어 | 설명 |
---|---|
DWORD32 |
32비트 부호 없는 정수 |
DWORD64 |
64비트 부호 없는 정수 |
Int32 |
32비트 부호 있는 정수 |
Int64 |
64비트 부호 있는 정수 |
LONG32 |
32비트 부호 있는 정수 |
LONG64 |
64비트 부호 있는 정수 |
Uint32 |
서명되지 않은 INT32 |
Uint64 |
서명되지 않은 INT64 |
ULONG32 |
서명되지 않은 LONG32 |
ULONG64 |
서명되지 않은 LONG64 |
포인터 정밀도
포인터 전체 자릿수가 변경되면(즉, 32비트 Windows에서 32비트, 64비트 Windows가 있는 64비트) 포인터 정밀도 데이터 형식은 그에 따라 정밀도를 반영합니다. 따라서 포인터 산술 연산을 수행할 때 이러한 형식 중 하나에 포인터를 캐스팅하는 것이 안전합니다. 포인터 전체 자릿수가 64비트이면 형식은 64비트입니다. 개수 형식은 포인터가 참조할 수 있는 최대 크기도 반영합니다. 다음은 포인터 정밀도 및 개수 형식입니다.
용어 | 설명 |
---|---|
DWORD_PTR |
포인터 정밀도에 대한 부호 없는 long 형식입니다. |
HALF_PTR |
포인터의 절반 크기입니다. 포인터와 두 개의 작은 필드가 포함된 구조체 내에서 를 사용합니다. |
INT_PTR |
포인터 정밀도에 대한 부인 정수 형식입니다. |
LONG_PTR |
포인터 정밀도에 대해 서명된 긴 형식입니다. |
Size_t |
포인터가 참조할 수 있는 최대 바이트 수입니다. 포인터의 전체 범위에 걸쳐 있어야 하는 개수에 사용합니다. |
SSIZE_T |
서명된 SIZE_T. |
UHALF_PTR |
서명되지 않은 HALF_PTR. |
UINT_PTR |
서명되지 않은 INT_PTR. |
ULONG_PTR |
서명되지 않은 LONG_PTR. |
특정 Pointer-Precision 형식
다음 새 포인터 형식은 포인터의 크기를 명시적으로 지정합니다. 64비트 코드에서 포인터를 사용할 때 주의: 32비트 형식을 사용하여 포인터를 선언하는 경우 운영 체제는 64비트 포인터를 잘려 포인터를 만듭니다. (모든 포인터는 64비트 Windows에서 64비트입니다.)
용어 | 설명 |
---|---|
POINTER_32 |
32비트 포인터입니다. 32비트 Windows에서는 네이티브 포인터입니다. 64비트 Windows에서는 잘린 64비트 포인터입니다. |
POINTER_64 |
64비트 포인터입니다. 64비트 Windows에서는 네이티브 포인터입니다. 32비트 Windows에서는 기호 확장 32비트 포인터입니다. 높은 포인터 비트의 상태를 가정하는 것은 안전하지 않습니다. |