Graphisoft®

GSRootVersion: 1.0

BM 관리자에 대하여

기본 메모리 관리자는 Windows 및 Macintosh에서 메모리를 관리하기 위한 플랫폼 독립 인터페이스를 정의합니다. BM 관리자는 플랫폼 독립적인 방식으로 메모리 블록을 할당, 해제 등을 위한 함수들을 제공합니다.

당신은 BM 관리자를 사용하여 Heap에 2가지 타입의 메모리 블록을 할당할 수 있습니다: 재배치 불가능 블록과 재배치 가능 블록. 재배치 불가능 블록은 고정된 Heap 안에 위치한 메모리 블록입니다. 이와는 대조적으로 재배치 가능 블록은 Heap 내에서 이동할 수 있는 메모리 블록입니다. 기본 메모리 관리자는 BM 관리자 작업 중에 이동 가능한 블록을 이동하여 Heap의 공간을 최적으로 사용할 수 있습니다.

BM 관리자는 재배치 가능/불가능 블록 둘 다 참조하는 데이터 타입들을 제공합니다. 재배치 불가능 블록을 참조하려면 GSPtr 데이터 타입으로 정의된 포인터 변수를 사용하면 됩니다. 재배치 불가능 블록에 대한 포인터는 단순히 블록의 1번째 바이트의 주소를 가리킵니다. 기본 메모리 관리자는 재배치 가능 블록을 참조하기 위해 이중 우회(double incirection) 방식을 사용합니다. 기본 메모리 관리자는 마스터 포인터를 이용하여 내부적으로 재배치 가능 블록을 추적합니다. 관리자가 블록을 이동하면 마스터 포인터를 업데이트하므로 항상 재배치 가능 블록의 주소를 포함합니다. GSHandle 데이터 타입으로 정의된 핸들을 사용하여 블록을 참조할 수 있습니다. 핸들에는 마스터 포인터의 주소가 포함되어 있습니다. (C 구문의 경우: GSHandle = &GSPtr)

기본 메모리 관리자 함수들을 사용하기 전에 BMInit 함수를 호출하여 BM 관리자를 초기화해야 합니다. 초기화한 후 관리자의 함수들을 사용하여 메모리 블록을 할당, 해제, 또는 재할당할 수 있습니다. BM 관리자가 더 이상 필요하지 않을 경우 BMExit 함수를 호출하여 BM 관리자가 할당한 리소스를 확보해야 합니다. BMInit을 호출하여 BM 관리자를 초기화하면 BM 관리자는 BMAbortProcBMOptProc를 사용하여 최소 메모리 크기를 지정할 수 있습니다. 이러한 함수들은 BM 관리자의 중단 및 최적화 작업을 처리하기 위한 사용자 정의 함수들입니다. BMCheckHeap 함수를 사용하여 BM의 메모리 구조를 확인할 수 있습니다. BMModifyGZPar 함수는 BM 관리자의 Grow Zone 파라미터를 수정하는데 사용됩니다.

BM 관리자의 대부분의 함수들은 실패할 때 마지막 오류 코드 값을 설정합니다. BM 관리자 함수가 실패한 직후에 만약 당신이 BMError 함수를 호출하면 이 오류 코드를 얻을 수 있습니다.

메모리 블록을 BMAllocateHandleBMAllocatePtr 함수로 할당할 수 있습니다. BMAllocateHandle은 할당된 블록에 대한 핸들을 리턴하고, BMAllocatePtr은 할당된 블록을 참조하는 포인터를 리턴합니다. BMAllocateHandleBMAllocatePtr에 의해 할당된 블록의 차이점은 BMAllocateHandle이 재배치 가능 메모리 블록을 할당하는 반면 BMAllocatePtr은 재배치 불가능 블록을 할당한다는 것입니다. 핸들의 상태를 수정하려면 BMModifyHandleState 함수를 호출하여 이를 수행할 수 있습니다. 예. 당신은 재배치 가능 블록의 상태를 재배치 불가능 블록으로 수정할 수 있습니다.

당신은 반드시 BMModifyHandle 함수를 호출하여 사용 전에 재배치 가능 블록을 참그고, 사용 후에 잠금 해제해야 합니다!

이전에 할당된 메모리 블록의 크기를 늘리려면 BMReallocHandleBMReallocPtr 함수를 사용하면 됩니다. 메모리 블록의 실제 크기는 BMGetHandleSize 또는 BMGetPtrSize 함수를 호출하여 얻을 수 있습니다. 할당된 메모리 블록이 더 이상 필요하지 않을 경우 BMKillHandle 또는 BMKillPtr 함수로 해제할 수 있습니다. BMKillHandleGSHandle이 참조한 메모리 블록을 해제하는 반면, BMKillPtrGSPtr에서 참조한 메모리 블록을 해제합니다. BMFreeMem 함수를 호출하면 해제된 양의 실제 메모리를 얻을 수 있습니다. BMClearHandle 함수를 호출하여 핸들에서 참조하는 메모리 블록을 0으로 채울 수 있습니다. BM 관리자가 현재 메모리를 할당하고 있는지 여부를 알고 싶다면 BMIsAllocateing 함수로 확인할 수 있습니다.

BM 관리자는 메모리 블록을 복사하거나 이어붙이는 함수를 제공합니다. 핸들에서 참조한 2개의 메모리 블록을 BMHandleAndHandle function 함수로 연결할 수 있습니다. BMPtrAndHandle 함수도 이 함수를 구현하지만 포인터가 연결할 블록을 식별할 것으로 예상합니다. 메모리 블록의 내용을 다른 블록으로 복사하려면 BMHandleToHandle 또는 BMPtrToHandle 함수를 사용할 수 있습니다.

BMMunger 함수는 텍스트 패턴을 검색하여 다른 문자열로 대체합니다.