필자는 필자의 시스템에서 특정 크기로 생성 된 메모리 매핑 된 파일은 기본적으로 항상 완전히 제로화되어 있음을 경험적으로 판단했습니다. 예를 들어, 전화Windows 메모리 매핑 파일 내용은 기본적으로 항상 0으로 설정되어 있습니까?
HANDLE hMM =
CreateFileMapping (h,
NULL,
PAGE_READWRITE,
0,
0x01400000,//20MB
NULL);
를 사용하여 .. 해당 파일의 매핑 된 뷰에 쓰기는 항상 완전히 I 제로가 아닌 데이터를 작성한 경우를 제외하고 0으로 채우 약 20MB의 파일에 발생합니다.
파일의 초기화되지 않은 부분을 0으로 가정 할 수 있는지 궁금합니다. 이 동작은 일반적으로 Windows에서 보장됩니까?
그래도 구현 세부 정보가 아닌 사용중인 인터페이스 계약을 준수해야합니다. 'CreateFileMapping' 문서가 보증되지 않는다고 (* 명시 적으로!) 밝혀 졌다면 * 보장되지 않습니다 *. 'ZwSetInformationFile' *은 구현 세부 사항입니다. Windows 9x에서는'ZwSetInformationFile'이 존재하지 않았고 Windows 12에서는 더 이상 존재하지 않습니다. –
@Matteo Italia : 거짓말. Win32는 거짓말로 가득차 있으며 Native API를 사용하여 MSDN에서 Win32 설명서를 신뢰할 수 없었습니다. Windows Internals Expert로서 필자는 Win32에서 주장하는 진실이 아니라 실제로 일어난 일에 대해 진실을 말하기 위해 왔습니다. : D – wj32
@ wj32 : 실제로 Win32는 응용 프로그램을 Win32s에서 NT, 9x 및 Microsoft가 미래에 생각할 커널에서 원활하게 작동하도록하기 위해 플랫폼에 특정한 구현에 의존하지 않고 "거짓으로 가득 차게"설계되었습니다. 세부. 잘 작동하는 Win32 응용 프로그램은 Win32 계약을 통해 향후 Windows 버전에서 계속 작동해야합니다. Raymond Chen의 블로그를 읽지 않으셨습니까? ':)' –