본문 바로가기

프로그래밍 활용(TIP)

(20)
한개의 프로그램, 다중 프로시저? API Win32 프로그래밍을 공부해본 경험이 있다면, 프로시저란것을 알것이다. 순차적으로 한줄씩 처리하는 콘솔 기반의 프로그램과 달리 WIn32 Application은 메시지 처리를 기반으로 하고 있고, 발생되는 메시지를 처리하기위한 프로시저가 존재한다. 기본적으로 Visual Studio에서 생성해주는 Win32 Application 프로그램은 하나의 프로시저만 존재한다. 프로젝트를 진행하다보니, 2개의 프로시저가 필요한 경우가 발생했고, 한개의 프로그램에 다중 프로시저가 가능한지 궁금증이 생겼다. 알아보니 프로시저는 메시지가 발생한 윈도우의 핸들을 필요로 하게 되고, 핸들을 다수 만들어서 각각의 프로시저와 연결해주면 상관없다는 것을 알았다. 윈도우 핸들은, CreateWindow의 리턴값으로 받을수..
메모리 누수 탐지(_CrtDumpMemoryLeaks) VS에서 메모리 누수를 탐지하기 위해서는 _CrtDumpMemoryLeaks()함수를 사용해 주면 된다. 이 함수는 메모리 릭이 의심되는 함수가 실행된 다음에 사용해 주면 되는데 보통 프로그램 마지막에 메모리를 검사하는데 사용하기도 한다. _CrtDumpMemoryLeaks() 함수는 이 함수가 실행되는 그 시점을 기준으로 할당된 메모리가 해제되었는지 아닌지를 검사하기 때문이다. 그렇기 때문에 함수 안에서 할당하고 바로 다음에 검사하면 메모리 릭이 있다고 보고 한다. 이러한 이유로 보통 프로그램 마지막에 사용하는 경우가 많다. 1. [ 코드 ] 2. void Func() 3. { 4. int *p1 = (int*)malloc(4); 5. int *p2 = new int; 6. _CrtDumpMemoryL..
error C3859: PCH에 대한 가상 메모리 범위를 초과했습니다. Visual C++ 컴파일러 옵션 /Zm(메모리 할당 제한 지정) 미리 컴파일된 헤더에 대한 컴파일러의 메모리 할당 제한을 지정합니다. /Zmnumber 인수 number 미리 컴파일된 헤더의 메모리 할당 제한을 결정하는 배율 인수입니다. 설명 number 인수는 배율 인수입니다. 기본값은 100이며, 이는 50MB의 메모리 할당을 지정합니다. 최대값은 2000입니다. 다음 표에서는 number가 메모리 할당을 어떻게 수정하는지 보여 줍니다. 값 메모리 할당 10 5.0MB 100 50MB 200 100MB 1000 500MB 2000 1000MB 이전 버전의 Visual C++에서는 컴파일러가 각각 일정한 제한이 있는 여러 개의 개별 힙을 사용했습니다. 지금은 컴파일러가 필요에 따라 동적으로 힙의 크기..
IntersectRect() 함수 관련 주의점 프로그래밍을 하면서 충돌처리를 하는 방법중 하나로 사용할수 있다. rect와 rect간의 충돌을 알려주는 함수로, 두 rect의 충돌을 감지하면 첫번째 파라미터에 충돌한 rect의 포인터를 전달한다. 두 rect간 충돌이 없으면 zero(0)을 리턴하고, 충돌하면 nonzero(0이 아닌값)을 리턴한다. 정의 BOOL WINAPI IntersectRect( __out LPRECT lprcDst, __in CONST RECT *lprcSrc1, __in CONST RECT *lprcSrc2); 2,3번 파라미터의 사각형의 겹치는 영역을 1번 파라미터에 저장 return value 안겹치면 : 0 겹치면 : 0 이 아닌 값 lprcDst [out] Pointer to the RECT structure tha..