전역 및 로컬 함수

전역 및 로컬 함수는 16비트 코드에서 포팅하거나 16비트 Windows와의 소스 코드 호환성을 유지하기 위해 지원됩니다. 32비트 Windows부터 전역 및 로컬 함수는 프로세스의 기본 힙에 대한 핸들을 사용하여 해당 힙 함수를 호출하는 래퍼 함수로 구현됩니다. 따라서 전역 및 로컬 함수는 다른 메모리 관리 함수보다 오버헤드가 더 큽니다.

힙 함수는 전역 및 로컬 함수보다 더 많은 기능과 제어를 제공합니다. 설명서에서 전역 또는 로컬 함수를 사용해야 한다고 구체적으로 명시하지 않는 한 새 애플리케이션은 힙 함수를 사용해야 합니다. 예를 들어 일부 Windows 함수는 LocalFree를 사용하여 해제해야 하는 메모리를 할당하고 전역 함수는 여전히 DDE(동적 데이터 교환), 클립보드 함수 및 OLE 데이터 개체와 함께 사용됩니다. 전역 및 로컬 함수의 전체 목록은 메모리 관리 함수의 표를 참조하세요.

Windows 메모리 관리는 16비트 Windows처럼 별도의 로컬 힙 및 전역 힙을 제공하지 않습니다. 결과적으로, 함수의 전역 및 지역 패밀리는 동일하며 함수 중에서 선택하는 것은 개인적인 선호의 문제입니다. 16비트 분할 메모리 모델에서 32비트 가상 메모리 모델로 변경되어 관련된 전역 및 로컬 함수와 해당 옵션이 불필요하거나 의미가 없습니다. 예를 들어 로컬 및 전역 할당 모두 32비트 가상 주소를 반환하므로 더 이상 근거리 및 먼 포인터가 없습니다.

GlobalAllocLocalAlloc에 의해 할당된 메모리 개체는 다른 프로세스에서 액세스할 수 없는 읽기/쓰기 액세스 권한이 있는 전용 커밋된 페이지에 있습니다. GMEM_DDESHAREGlobalAlloc을 사용하여 할당된 메모리는 실제로 16비트 Windows에서와 같이 전역적으로 공유되지 않습니다. 이 값은 효과가 없으며 호환성에서만 사용할 수 있습니다. 다른 용도로 공유 메모리가 필요한 애플리케이션은 파일 매핑 개체를 사용해야 합니다. 여러 프로세스가 동일한 파일 매핑 개체의 보기를 매핑하여 명명된 공유 메모리를 제공할 수 있습니다. 자세한 내용은 파일 매핑을 참조하세요.

메모리 할당은 디스크의 페이징 파일에 있는 스토리지를 포함하여 사용 가능한 실제 메모리에 의해서만 제한됩니다. 고정 메모리를 할당하면 GlobalAllocLocalAlloc 은 호출 프로세스가 메모리에 액세스하는 데 즉시 사용할 수 있는 포인터를 반환합니다. 이동 가능한 메모리를 할당할 때 반환 값은 핸들입니다. 이동 가능한 메모리 개체에 대한 포인터를 얻으려면 GlobalLockLocalLock 함수를 사용합니다.

할당된 메모리의 실제 크기는 요청된 크기보다 클 수 있습니다. 할당된 실제 바이트 수를 확인하려면 GlobalSize 또는 LocalSize 함수를 사용합니다. 할당된 금액이 요청된 금액보다 크면 프로세스에서 전체 금액을 사용할 수 있습니다.

GlobalReAllocLocalReAlloc 함수는 GlobalAllocLocalAlloc에서 할당한 메모리 개체의 크기 또는 특성을 변경합니다. 크기가 증가하거나 감소할 수 있습니다.

GlobalFreeLocalFree 함수는 GlobalAlloc, LocalAlloc, GlobalReAlloc 또는 LocalReAlloc에서 할당한 메모리를 해제합니다. 핸들을 무효화하지 않고 지정된 메모리 개체를 삭제하려면 GlobalDiscard 또는 LocalDiscard 함수를 사용합니다. 나중에 GlobalReAlloc 또는 LocalReAlloc 에서 핸들을 사용하여 동일한 핸들과 연결된 새 메모리 블록을 할당할 수 있습니다.

지정된 메모리 개체에 대한 정보를 반환하려면 GlobalFlags 또는 LocalFlags 함수 사용합니다. 이 정보에는 개체의 잠금 수가 포함되며 개체를 삭제할 수 있는지 또는 이미 삭제되었는지 여부를 나타냅니다. 지정된 포인터와 연결된 메모리 개체에 핸들을 반환하려면 GlobalHandle 또는 LocalHandle 함수를 사용합니다.

메모리 할당 방법 비교