내 모델링 코드에서 부스트 memory mapped files을 사용하여 디스크에 대용량 배열을 할당합니다.부스트 메모리 매핑 파일이 HDD보다 여유 공간보다 많은 디스크 공간을 할당했을 때 어떻게 오류를 감지 할 수 있습니까?
잘 작동하지만 디스크 드라이브의 여유 공간보다 큰 배열을 할당하는 상황을 감지 할 수있는 방법을 찾을 수 없습니다. 내가 allocted되지 않는 메모리의 일부에 기록 될 때까지
이boost::iostreams::mapped_file_params file_params;
file_params.path = path;
file_params.mode = std::ios::in | std::ios::out;
file_params.new_file_size = static_cast<size_t>(8E9); # About 10GB
file_params.length = static_cast<size_t>(8E9);
boost::iostreams::mapped_file result;
result.open(file_params);
나는 심지어의 becaue (resuld.data()
에서 작업 할 수 있습니다 : 행복하게 실행하는 코드를 다음과 같은 예를 들어 (내가 HDD 여유 공간 8E9 바이트 이하가 있다고 가정) HDD 공간)를 누락 한 후 나는 다음과 같은 오류 얻을 :
memory access violation at address: 0x7e9e2cd1e000: non-existent physical address
나는 비밀 memory access violation
를 얻기 전에이 오류를 감지 할 수있는 방법이 있나요를?
필자는 실제로이 테스트를 수행했습니다. 파일이 파티션의 사용 가능한 공간보다 크면 코드에 메모리 액세스 위반이 있으며 코드가 작 으면 코드를 편집하지 않고 파티션의 여유 공간을 변경하여 테스트했습니다. .
가능한 솔루션 디버깅
제로와 I std:fill
파일의 내용이 아직도 memory access violation
을받을 경우하지만이 오류가 할당 근처에 위치하고 있으며 쉽게. 차라리 예외를 발생시키는 방법을 원합니다.
디스크 공간이 부족한 것처럼 보이지만 매핑 한 범위의 메모리 크기를 액세스하고 있습니다. ir가 실제로 0x1E11이 아닌 1E11입니까? – Oncaphillis
이것은 디스크 공간과 완전히 관련되어 있으며 실제로이 오류가 발생합니다. 내 '/ tmp' (10GB 크기) 코드에 8GB를 할당하면 2.5GB 파일을이 파티션에 쓰면이 오류가 발생합니다. 이것은 부스트에서 다소 불명확 한 버그 일 수 있습니다. --- 자동으로 공간을 잘라낼 수 있습니다 (이 경우 실제로 범위 밖의 메모리에 액세스합니다). –
@user 나는 질문을 편집했다 --- 나는 그 숫자가 무의미하다고 생각했다. 실제로는 약 8GB이며, 숫자는 이제이를 반영해야합니다. 오해를해서 죄송합니다. –