본문 바로가기

Windows에서 메모리 사용량 확인하기 Windows에서 메모리 사용량을 정확히 확인하기는 매우 어렵다. 일반적으로 메모리라고 하면 물리적인 램을 생각하며, 메모리 사용량이라고 하면 물리적 램 사용량이라고 생각하는 경우가 많다. 물론 물리 메모리의 사용량이라고 생각하는게 맞겠지만, 실제로는 가상 메모리라는 것도 존재한다. 운영체제에서 사용하는 메모리량은 물리적 램 크기와는 다르게된다. 메모리 사용량에는 복잡 미묘한 부분이 많다. 아래는 필자가 프로그램 성능 측정을 위해서 찾았던 내용을 중점으로 정리하였다. 위도우즈 위주의 실행 로직에서 사용되는 실제 메모리 량이 얼마인지 측정하기 위한 목적이다. 작성자: http://ospace.tistory.com/,2013.04.20 (ospace114@empal.com) Windows 메모리 모델 실제 .. 더보기
memory leak 자동 감지기 #ifndef __EMEMORY_H_20091125__ #define __EMEMORY_H_20091125__ #ifdef __cplusplus extern "C" { #endif #ifdef _USE_MEM_LEAK #ifdef _WIN32 #include #include #ifdef __cplusplus inline void* __cdecl operator new(size_t size, const char* filename, int line) { return ::operator new(size, 1, filename, line); } inline void __cdecl operator delete(void* ptr, const char* filename, int line) { ::operator de.. 더보기
프로세스의 CPU 사용량 측정하기 CPU의 전체 사용량 혹은 특정 프로세스의 CPU 사용량을 측정하는 방법입니다. 만약 이글을 읽은 사람 중에서 .NET을 사용한다면 더 쉬운 방법이 있으니 다른 글[2]을 참조하길 바랍니다. 여기서 사용하는 방법은 레지스트를 통한 HKEY_PERFORMANCE_DATA 키에 값을 가져오는 방법입니다. 실제 regedit로 해서 HKEY_PERFORMANCE_DATA를 조회할 수는 없습니다. 조회할 수 있다면 좋을 텐데... 여하튼, 보이지 않는 레지스트리 키입니다. 그래서 더 어렵습니다. HKEY_PERFORMANCE_DATA에 있는 값 들을 통해서 성능에 관련된 정보를 획득할 수 있습니다. HKEY_PERFORMANCE_DATA를 통해서 값을 가져온다고 해도 원하는 값을 얻는데는 쉽지가 않습니다. 왜 .. 더보기
프로그램의 메모리 사용량 측정하기 프로그램 자신의 사용하고 있는 메모리 사용량을 측정하기 위한 것입니다. 다른 프로세스에 적용되지는 않습니다. 이곳에서 사용되는 방법은 VirtualQuery() 함수를 사용한 방법입니다. 생각보다 코드는 단순합니다. 작성일: 2009.10.07 (http://ospace.tistory.com/), ospace114@엠팔.컴 메모리 사용량 측정하기 GetPrivateBytes() 함수가 메모리 사용량을 측정하는 함수이다. 이 함수는 순수하게 물리 메모리에 적재된 Private 영역만 추출하게 된다. 가상 메모리 시작은 0부터 시작해서 0x8000000까지 조회한다. 이 영역은 메모리 영역에서 프로세스 영역으로 사용자가 사용할 수 있는 Private 영역에 해당한다. 이는 Windows 98과 ME에서 제공.. 더보기
콜백 함수 (Callback function) 콜백 함수란? 일반적인 함수는 응용프로그램에서 운영체제 함수를 호출하는 형태이다. 즉, 일반적인 API 함수들을 호출해서 원하는 기능을 사용하게 된다. 그러나 콜백 함수는 응용프로그램이 아닌 운영체제 함수에서 프로그래머가 정의한 함수를 호출하는 형태이다. 바꿔말하면 일반적인 함수 호출 순서의 반대 방향이다. 물론 아무렇게나 정의하는 것은 아니다. 이름은 등록시 임의로 정의할 수 있지만 인자 수나 자료형은 정해져 있다. 예를 들어서 윈도우 클래스 등록하는 경우 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); WNDCLASS wc; wc.style = CS_HREDRAM | CS_VERDRAW; wc.lpfnWndPr.. 더보기
문자열 - 유니코드 팁 tstring 유니코드 팁 다음은 유니코드 문자열 처리에 있어서 기본적인 팁들을 모아두었다. Generic Text Mapping 프로그램이 유니코드에 대응하기 위해서는 모든 single byte char 관련 타입들을 generic macro를 사용하도록 수정해야 한다. (JS) 참 말이 이해하기 힘들다. 일반적인 문자(ascii)는 1바이트다. 한국어는 1바이트로 안된다. 이를 처리하기 위한 방식은 여러가지가 있고 그중에 하나가 Microsoft의 Unicode이다. 이는 윈도우즈 환경에서는 거의 표준이다. 사실 윈도우즈가 MS꺼니깐. 프로그램이 구동되는 환경은 상당히 다양하고, 또한 언어도 매우 다양하다. 영어권이라면 1바이트 문자열로 충분히 가능하지만 그외는 그렇지 않다. 모든 언어권을 지원할 수 있는 프로그램.. 더보기
메모리릭(Memory leak) 관련 메모리 릭 문제는 해충과 같다. 아무리 없애도 또 나오고, 다시 없애도 다시 나온다. 아무리 좋은 기술과 좋은 방법을 도입한다고 해도 근본적인 문제해결은 되지않으며 단지 도움만 될뿐이다. 여기서 그 도움이 되는 기술을 살펴보겠다. 작성자: Ospace(ospace114@empal.com), cyworld.com/ospace 메모리릭(Memory leak) 관련 CMemoryState MFC 클래스로 현재 메모리 스냅샷을 저장해두어 메모리 릭 위치를 찾는데 도움이 된다. MSDN에서 Taking Memory Snapshots으로 찾으면 된다. 사용방법은 간단하다. 객체 선언 시작 스냅샷 끝 스냅샷 비교 // 객체 선언 CMemoryState begin, end, diff; // 시작 스냅샷 begin.Ch.. 더보기
도스 프롬프트에서 명령어 옵션 처리 double optionType = 0; LPCTSTR pszValue = NULL; int main(int argc, char* argv[]) { // argc개수(옵션개수) 만큼 for문 실행 if (argc ") << endl << endl; //... } BOOL ParseOptions(int argc, char* argv[]) { for (int nIndex = 1; nIndex < argc; nIndex++) { // an option // 옵션 값에서.. 더보기

반응형