다음을 통해 공유


특성 할당

[할당] ACF 특성을 사용하면 IDL 파일에 정의된 형식에 대한 메모리 할당 및 할당 취소를 사용자 지정할 수 있습니다.

typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;

매개 변수

allocate-option-list

하나 이상의 메모리 할당 옵션을 지정합니다. single_node 또는 all_nodes 중 하나 또는 무료 또는 dont_free 중 하나 또는 각 쌍에서 하나를 선택합니다. 둘 이상의 옵션을 지정하는 경우 옵션을 쉼표로 구분합니다.

type-attribute-list

다른 선택적 ACF 형식 특성을 지정합니다. 둘 이상의 형식 특성을 지정하는 경우 옵션을 쉼표로 구분합니다.

type-name

IDL 파일에 정의된 형식을 지정합니다.

설명

[allocate] 특성에는 다음과 같은 유효한 옵션이 있습니다.

옵션 Description
all_nodes 를 한 번 호출하여 모든 노드에 대해 메모리를 할당하고 해제합니다.
single_node 메모리의 각 노드를 할당하고 해제하기 위해 많은 개별 호출을 합니다.
free 서버 스텁에서 반환할 때 메모리를 해제합니다.
dont_free 서버 스텁에서 반환할 때 메모리를 해제하지 않습니다.

 

기본적으로 스텁은 midl_user_allocate 호출하여 고유 또는 전체 포인터에서 참조하는 데이터에 대한 스토리지를 할당하고 각 포인터에 대해 개별적으로 midl_user_free 수 있습니다.

옵션 all_nodes 지정하여 애플리케이션 속도를 최적화할 수 있습니다. 이 옵션은 스텁이 지정된 형식의 포인터를 통해 참조되는 모든 메모리의 크기를 계산하고 midl_user_allocate 단일 호출을 수행하도록 지시합니다. 스텁은 midl_user_free 한 번 호출하여 메모리를 해제합니다.

dont_free 옵션은 MIDL 컴파일러가 지정된 형식에 대한 midl_user_free 호출하지 않는 서버 스텁을 생성하도록 지시합니다. dont_free 옵션을 사용하면 원격 프로시저 호출이 완료되고 클라이언트로 반환된 후에도 서버 애플리케이션에서 포인터 구조에 계속 액세스할 수 있습니다.

[allocate] 특성은 데이터가 숨기지 않을 때 메모리를 다시 할당하는 all_nodes 옵션으로 정규화된 형식에 대한 포인터인 모든 [in, out] 매개 변수를 발생합니다. 이 매개 변수에 대해 이전에 할당된 메모리를 해제하는 것은 애플리케이션의 책임입니다. 예:

typedef struct thistype 
{ 
    [string] char * PTHISTYPE;  
} * PTHISTYPE
HRESULT proc1 ( [in,out] PTHISTYPE * ppthistype);

데이터 형식 PTHISTYPE은 스텁에 의해 [out] 방향으로 재할당됩니다. 따라서 애플리케이션은 이 매개 변수의 데이터에 대해 이전에 할당한 메모리를 해제해야 합니다. 그렇지 않으면 메모리 누수가 발생합니다.

/* ACF file */ 
typedef [allocate(all_nodes, dont_free)] PTYPE1; 
typedef [allocate(all_nodes)] PTYPE2; 
typedef [allocate(dont_free)] PTYPE3;

참고 항목

ACF(애플리케이션 구성 파일)

in

midl_user_allocate

midl_user_free

out

Typedef