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進行單一呼叫,更有效率地釋放記憶體。 不過,使用節點位元組記憶體配置時,伺服器存根效能通常會增加,因為伺服器存根通常可以使用不需要配置的私人記憶體。
如需詳細資訊,請參閱 節點逐節點配置和解除分配。