2014-09-10 10 views
1

연습을 위해, 나는 STARTUPINFO 구조를 본다. 보시다시피 마지막 세 요소의 유형은 HANDLE입니다.HANDLE의 크기는 얼마입니까?

그래서 HANDLE의 크기를 알고 싶습니다. 누군가 HANDLE의 크기를 알고 있습니까?

+2

sizeof (HANDLE)를 찾아보십시오. 나는 그것이 무효라고 생각한다. –

+1

HANDLE은 일반적으로'void *'입니다. 따라서 포인터는 4 바이트 (시스템에 따라 다름) – AndyG

+0

'HANDLE'은 C99에 없으며 Posix에 없습니다. 윈도우 일 것 같아요. –

답변

4

Windows HANDLE 유형은 완전히 불투명하지 않습니다. Windows는 의존 할 수있는 몇 가지 속성을 정의합니다. 주된 질문은 귀하의 질문에 대한 답변입니다. 항상 유형이 void *입니다. MSDN에 Windows Data Types 항목에서 :

HANDLE

개체에 대한 핸들. 다음과 같이

이 유형은 WINNT.H에 선언 :

typedef PVOID HANDLE;

을 나중에 표에서 볼 수 PVOIDvoid *로 정의된다.

따라서 HANDLEvoid *과 동일한 크기입니다. 즉, 32 비트 컴파일러를 사용하는 경우 32 비트이고 64 비트 컴파일러를 사용하는 경우 64 비트입니다. 이 값 중 하나를 코드에 하드 코딩 할 필요가 없으며 대신 sizeof(HANDLE)을 사용하면됩니다.

Windows HANDLE 유형의 다른 속성은 매우 모호하며 커널 처리의 경우에만 the bottom two bits are always zero입니다. 코드에 의존 할 필요는 없으며 절대 원하지 않을 것입니다. 완전성을 위해 이것을 언급하고 Microsoft가 HANDLE을 내부 구현 세부 이상의 의미로 정의한 방법을 강조합니다.

5

가장 좋은 대답은 sizeof(HANDLE)을 사용하여이 정보를 얻는 것입니다. 내가 기억한다면 HANDLE은 일반적으로 void*에 대해 typedef으로 구현되므로 아마도 32 비트 또는 64 비트 일 것이지만 이것에 의존해서는 안됩니다.

희망이 도움이됩니다.

관련 문제