특성 할당
[할당] 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;