문제

QT 기반 C ++ 응용 프로그램을 작성하고 있으며 현재 시스템이 실제로 메모리로드를 유지할 수 있는지 확인하려면 메모리 파편화를 감지 할 수 있어야합니다. 프로그램에 큰 이미지를로드합니다 (15/21 메가 픽셀은 표준입니다) 메모리에서 일부 필터링을 수행합니다 (Sparse 행렬). 예를 들어, Windows에서 메모리 파편화 문제가 발생하고 VMMAP은 이것에 매우 도움이되었습니다. 문제는 일부 DLL (Wacom Tablet "Wintab32.dll"및 Ultramon App)이 재배치되지 않으므로 주소 공간을 분할했습니다. 프로세스의 0x10000000-0x30000000 VA에서.

나는 응용 프로그램에 조각화 문제에 대한 일종의 인식을 제공하고 Cross-Platform (Linux/Mac/Win32) 접근 방식이 VMMAP에 이미 존재하는 정보를 제공하는지 궁금해하고 싶습니다.

도움이 되었습니까?

해결책

짧은 대답 : 휴대용 방법이 없습니다.

더 긴 답변 : 힙 구현 방법과 작동 방식은 플랫폼, STD 라이브러리 및 운영 체제간에 광범위한 구현 세부 사항입니다. 각 구현마다 다른 버전을 만들어야합니다. 제공된 경우 구현은 API를 제공합니다. (어느 제 생각에는 타겟팅하는 세 가지 플랫폼의 경우가되어야합니다.)

다른 팁

나는 당신이 지나치게 비관적이라고 생각합니다. 21 메가 픽셀, 16 비트의 콜로드 펙 (Colordepth)과 동일한 크기의 알파 앤은 168MB 만 소요됩니다. 32 비트 시스템의 사용 가능한 주소 공간은 기가 바이트로 측정됩니다.

이것이 필요한 것을할까요?

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top