다음을 통해 공유


Stub-Allocated 버퍼

트리 또는 그래프의 각 노드에 대해 고유한 호출을 강제하는 대신 스텁이 데이터의 크기를 계산하고 midl_user_allocate 또는 midl_user_free한 번의 호출을 통해 메모리를 할당하고 해제하도록 지시할 수 있습니다. ACF 특성 [allocate(all_nodes)] 사용자 제공 메모리 관리 함수에 대한 단일 호출에서 모든 노드를 할당하거나 해제하도록 스텁에 지시합니다.

예를 들어 RPC 애플리케이션은 다음 이진 트리 데이터 구조를 사용할 수 있습니다.

/* IDL file fragment */
typedef struct _TREE_TYPE 
{
    short sNumber;
    struct _TREE_TYPE * pLeft;
    struct _TREE_TYPE * pRight;
} TREE_TYPE;

typedef TREE_TYPE * P_TREE_TYPE;

이 데이터 형식에 적용된 [allocate(all_nodes)] ACF 특성 ACF의 typedef 선언에 다음과 같이 표시됩니다.

/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;

[allocate] 특성은 포인터 형식에만 적용할 수 있습니다. [할당] ACF 특성은 DCE IDL에 대한 Microsoft 확장이므로 MIDL /osf 스위치로 컴파일하는 경우 사용할 수 없습니다. [allocate(all_nodes)] 포인터 형식에 적용되면 MIDL 컴파일러에서 생성된 스텁은 지정된 데이터 구조를 트래버스하여 할당 크기를 결정합니다. 그런 다음 스텁은 단일 호출을 통해 그래프 또는 트리에 필요한 전체 메모리 양을 할당합니다. 클라이언트 애플리케이션은 midl_user_free한 번 호출하여 메모리를 훨씬 더 효율적으로 해제할 수 있습니다. 그러나 서버 스텁은 할당이 필요하지 않은 프라이빗 메모리를 사용할 수 있기 때문에 노드별 메모리 할당을 사용하는 경우 일반적으로 서버 스텁 성능이 향상됩니다.

자세한 내용은 노드별 할당 및 할당 취소 참조하세요.