буферы 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)], примененный к этому типу данных, отображается в объявлении typedef в ACF следующим образом:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
Атрибут [выделение] можно применять только к типам указателей. [выделение] атрибут ACF является расширением Майкрософт для IDL DCE, и, как это, невозможно, если вы компилируете с помощью переключателя MIDL /osf. Если [выделение(all_nodes)] применяется к типу указателя, заглушки, созданные компилятором MIDL, проходят по указанной структуре данных для определения размера выделения. Затем заглушки вызывают один вызов, чтобы выделить весь объем памяти, необходимой графом или деревом. Клиентское приложение может значительно эффективнее освободить память, выполнив один вызов midl_user_free. Однако производительность заглушки сервера обычно увеличивается при использовании выделения памяти узла по узлам, так как заглушки сервера часто могут использовать частную память, которая не требует выделения.
Дополнительные сведения см. в распределения узлов и распределения сделки.