2011-02-22 7 views
1

나는 윈도우 장치 드라이버를 거치지 그리고 난 같은 구조체 코드를 보았다 :기본적인 질문에 대한 구조체

struct driver1 
{ 
     UINT64 Readable  : 1; 
     UINT64 Writable  : 1; 
     UINT64 Executable : 1; 
     UINT64 Control  : 3; 
     UINT64 Status  : 1; 
     UINT64 Reserved  : 51; 
     UINT64 Available1 : 5; 
     UINT64 IsMapped  : 1; 
}; 

UINT64은 단일 비트를 나타낼 지를? 콜론이 비트를 나타 냅니까?

+1

당신이 찾고있는 용어는 "비트 필드"입니다. – Justin

답변

3

이것은 Control 3 소요 Readable, ExecutableWritable 및 각 비트를 차지한다는 등 Reserved 51을 의미한다.

자세한 내용은 http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html을 참조하십시오.

UINT64는 단순히 전체 비트 필드가 64 비트 부호없는 정수 내부에 있음을 의미합니다.

1

이들은 bitfields in C이므로 구조체를 통해 해당 비트를 독립적으로 액세스 할 수 있습니다.

3

그건 생각입니다. 그렇습니다. 그 비트 필드라는. 숫자는 코더가 해당 필드를 차지할 것을 요청하는 비트 수를 나타냅니다. 그들 모두를 계산하면 64 개가 더 합쳐지는 것을 볼 수 있습니다.

C++은 (Ada와는 달리) 전체 구조체가 64 비트만을 차지한다는 실질적인 방법을 제공하지 못합니다. 그래서이 시스템을 실행하도록 설계된 시스템이 아닌 다른 시스템에서이 시스템을 컴파일한다면, 나는 그것을 확인해 볼 것입니다.

C++로 장치 드라이버를 작성할 때 비트 필드를 사용하지 않습니다. 대신 비트 마스크를 사용합니다. 물론 문제는 플랫폼이 바이트를 어떻게 주문 하는지를 알아야한다는 것입니다.