2020년 4월 2일 목요일

Window C++ 가용 메모리 확보하기 (Not MFC)

https://ansur.blogspot.com/2020/04/window-c.html

여기에서 MFC 기반으로 사용된 가용 메모리 확보를 알아 보았습니다.
하지만 MFC를 쓰지 않고 사용 하는 방법을 알아 보겠습니다.

일단 코드 부터 확인 하겠습니다.


#include <new>

MEMORYSTATUSEX status;
status.dwLength = sizeof(status);
GlobalMemoryStatusEx(&status);

UINT nUsageMemSize = status.ullAvailVirtual;
double fMemPercent = 0.0;

while (true)
{  
 LPBYTE lpChk = new (std::nothrow) BYTE[nUsageMemSize];
 if (lpChk == nullptr)
 {
  fMemPercent = fMemPercent == 0.0 ? 0.1 : fMemPercent*0.1;
  nUsageMemSize = (UINT)(status.ullAvailVirtual * fMemPercent);
  if (nUsageMemSize < nMinBuff)
   nUsageMemSize = nMinBuff;
 }
 else
 {
  delete[] lpChk;
  break;
 }
}

<위 코드는 Visual Studio 2013 Window 10 64bit에서 테스트 하였습니다>

기존의 포스팅 된 내용은 try catch 를 이용하여 처리를 하였는데 위 처리 방법은 std::nothrow 를 이용하여
exception 을 발생 시키지 않는 데신 메모리를 할당할수 없으면 nullptr 을 리턴 하는 점 입니다.


그 이후 처리 방법은 이전 포스팅을 보시면 될거 같네요 ^^

댓글 없음: