개발자료/MFC&WIN32

MEMORYSTATUS

구룡포과메기 2011. 1. 5. 14:33

1. Syntax

typedef struct _MEMORYSTATUS {
DWORD dwLength;
DWORD dwMemoryLoad;
DWORD dwTotalPhys;
DWORD dwAvailPhys;
DWORD dwTotalPageFile;
DWORD dwAvailPageFile;
DWORD dwTotalVirtual;
DWORD dwAvailVirtual;
} MEMORYSTATUS, *LPMEMORYSTATUS;

2. Remarks

dwLength : 메모리 구조체 크기
dwMemoryLoad : 사용중인 물리적 메모리 %
dwTotalPhys : 실제 물리적 메모리양(Byte)
dwAvailPhys : 현재 사용 가능한 물리적 메모리양(Byte)
dwTotalPageFile : commit된 메모리 limit의 현재 크기
dwAvailPageFile : 현재 프로세스가 commit할 수 있는 최대 메모리양
dwTotalVirtual : 호출한 프로세스의 가상 주소 공간의 사용자 모드 부분의 크기(Byte)

3. Requirements

OS Versions : Windows CE 1.0 and later
Header : Winbase.h

4. Code Example

* CE 에서 메모리 크기/ 사용량 얻어 오기

MEMORYSTATUS state;
state.dwLength=sizeof(&state);
GlobalMemoryStatus(&state);

CString str; 
str.Format(_T("실제 메모리 %d byte,\n사용가능한 메모리 %d\n,메모리 사용률 %d"),state.dwTotalPhys,state.dwAvailPhys,state.dwMemoryLoad);
AfxMessageBox(str);

*CE에서 폴더 전체 크기/ 남은 공간 얻어 오기

ULARGE_INTEGER m_FreeBytesAvailable;     // 

ULARGE_INTEGER m_TotalNumberOfBytes;     // 

ULARGE_INTEGER m_TotalNumberOfFreeBytes; // 

m_FreeBytesAvailable.QuadPart     = 0L;
m_TotalNumberOfBytes.QuadPart     = 0L;
m_TotalNumberOfFreeBytes.QuadPart = 0L;


int mtotal, mfree;

GetDiskFreeSpaceEx(
L"패스",                  // 여기에 경로를 넣어 주시면 됩니다. 
&m_uliFreeBytesAvailable,          

&m_uliTotalNumberOfBytes,         
&m_uliTotalNumberOfFreeBytes);  

mtotal=(int)(m_uliTotalNumberOfBytes.QuadPart>>20); // MB  단위로 변경
mfree=(int)(m_uliTotalNumberOfFreeBytes.QuadPart>>20);

str.Format(_T("실제 용량 %d MByte\n남은 용량 %d MByte"),mtotal,mfree);
AfxMessageBox(str);