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