GlobalAlloc 함수(winbase.h)

힙에서 지정된 바이트 수를 할당합니다.

참고 전역 함수는 오버헤드가 더 크고 다른 메모리 관리 함수보다 적은 기능을 제공합니다. 설명서에서 전역 함수를 사용해야 한다고 명시하지 않는 한 새 애플리케이션은 힙 함수를 사용해야 합니다. 자세한 내용은 전역 및 로컬 함수를 참조하세요.
 

구문

DECLSPEC_ALLOCATOR HGLOBAL GlobalAlloc(
  [in] UINT   uFlags,
  [in] SIZE_T dwBytes
);

매개 변수

[in] uFlags

메모리 할당 특성입니다. 0을 지정하면 기본값은 GMEM_FIXED. 이 매개 변수는 특별히 언급된 호환되지 않는 조합을 제외하고 다음 값 중 하나 이상일 수 있습니다.

의미
GHND
0x0042
GMEM_MOVEABLEGMEM_ZEROINIT 결합합니다.
GMEM_FIXED
0x0000
고정 메모리를 할당합니다. 반환 값은 포인터입니다.
GMEM_MOVEABLE
0x0002
이동 가능한 메모리를 할당합니다. 메모리 블록은 실제 메모리에서 이동되지 않지만 기본 힙 내에서 이동할 수 있습니다.

반환 값은 메모리 개체에 대한 핸들입니다. 핸들을 포인터로 변환하려면 GlobalLock 함수를 사용합니다.

이 값은 GMEM_FIXED 결합할 수 없습니다.

GMEM_ZEROINIT
0x0040
메모리 콘텐츠를 0으로 초기화합니다.
GPTR
0x0040
GMEM_FIXEDGMEM_ZEROINIT 결합합니다.
 

다음 값은 사용되지 않지만 16비트 Windows와의 호환성을 위해 제공됩니다. 무시됩니다.

GMEM_DDESHARE
GMEM_DISCARDABLE
GMEM_LOWER
GMEM_NOCOMPACT
GMEM_NODISCARD
GMEM_NOT_BANKED
GMEM_NOTIFY
GMEM_SHARE

[in] dwBytes

할당할 바이트 수입니다. 이 매개 변수가 0이고 uFlags 매개 변수가 GMEM_MOVEABLE 지정하는 경우 함수는 삭제된 것으로 표시된 메모리 개체에 대한 핸들을 반환합니다.

반환 값

함수가 성공하면 반환 값은 새로 할당된 메모리 개체에 대한 핸들입니다.

함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

Windows 메모리 관리는 별도의 로컬 힙 및 전역 힙을 제공하지 않습니다. 따라서 GlobalAllocLocalAlloc 함수는 기본적으로 동일합니다.

movable-memory flags GHNDGMEM_MOVABLE 불필요한 오버헤드를 추가하고 잠금을 안전하게 사용해야 합니다. 설명서에서 사용해야 한다고 구체적으로 명시하지 않는 한 피해야 합니다.

설명서에서 전역 함수를 사용해야 한다고 구체적으로 명시하지 않는 한 새 애플리케이션은 힙 함수를 사용하여 메모리를 할당하고 관리해야 합니다. 예를 들어 전역 함수는 여전히 DDE(동적 데이터 교환), 클립보드 함수 및 OLE 데이터 개체와 함께 사용됩니다.

GlobalAlloc 함수가 성공하면 요청된 메모리 양 이상을 할당합니다. 할당된 실제 금액이 요청된 금액보다 크면 프로세스에서 전체 금액을 사용할 수 있습니다. 할당된 실제 바이트 수를 확인하려면 GlobalSize 함수를 사용합니다.

힙에 요청을 충족할 수 있는 충분한 여유 공간이 없으면 GlobalAllocNULL을 반환합니다. NULL은 오류를 나타내는 데 사용되므로 가상 주소 0은 할당되지 않습니다. 따라서 NULL 포인터의 사용을 쉽게 감지할 수 있습니다.

이 함수와 함께 할당된 메모리는 8 바이트 경계에 맞춰지도록 보장됩니다. 동적으로 생성된 코드를 실행하려면 VirtualAlloc 함수를 사용하여 메모리를 할당하고 VirtualProtect 함수를 사용하여 PAGE_EXECUTE 액세스 권한을 부여합니다.

메모리를 해제하려면 GlobalFree 함수를 사용합니다. LocalFree를 사용하여 GlobalAlloc에 할당된 메모리를 해제하는 것은 안전하지 않습니다.

예제

다음 코드에서는 GlobalAllocGlobalFree를 간단하게 사용하는 방법을 보여줍니다.

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _cdecl main()
{
    PSECURITY_DESCRIPTOR pSD;

    pSD = (PSECURITY_DESCRIPTOR) GlobalAlloc(
           GMEM_FIXED,
           sizeof(PSECURITY_DESCRIPTOR));

    // Handle error condition
    if( pSD == NULL )
    {
       _tprintf(TEXT("GlobalAlloc failed (%d)\n"), GetLastError());
       return;
    }

    //see how much memory was allocated
    _tprintf(TEXT("GlobalAlloc allocated %d bytes\n"), GlobalSize(pSD));

    // Use the memory allocated

    // Free the memory when finished with it
    GlobalFree(pSD);
}

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

전역 및 로컬 함수

GlobalDiscard

GlobalFree

GlobalLock

GlobalSize

힙 함수

메모리 관리 함수