다음 함수는이 페이지 안에있는 주소의 페이지의 기본 주소를 가져 오는 데 사용됩니다 :얻을 수있는 페이지의 기본 주소
void* GetPageAddress(void* pAddress)
{
return (void*)((ULONG_PTR)pAddress & ~(PAGE_SIZE - 1));
}
하지만를 그것을 얻지 못했습니다. 여기에서 어떤 트릭이 나옵니까?
결론 :
개인적으로 Amardeep의 설명과 Alex B의 예가 가장 좋은 대답이라고 생각합니다. Alex B의 답변이 이미 투표 된대로, Amardeep의 대답을 공식적인 답변으로 받아들이고 싶습니다! 다 감사합니다.
"~은 모든 비트를 0으로 보완하고 마스크보다 높은 모든 비트를 설정합니다."---- 왼쪽 핸들 피연산자의 크기와 일치시겠습니까? –
~는 피연산자와 동일한 크기를 반환합니다. 이 경우 PAGE_SIZE가 리터럴 숫자로 정의 된 매크로 일 경우 대상 플랫폼에있는 'int'가 기본 값으로 설정됩니다 (32 비트). 코드 예제는 64 비트 시스템에서는 작동하지 않습니다.리턴 (void *) ((ULONG_PTR) pAddress & ~ (void *) (PAGE_SIZE - 1)); –