Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Атрибут ACF [allocate] позволяет настроить выделение памяти и освобождение для типа, определенного в 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] имеет следующие допустимые параметры.
| Параметр | Описание |
|---|---|
| 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] приведет к тому, что любой параметр [in, out], который является указателем на тип, соответствующий параметру all_nodes , перераспределит память при отмене распределения данных. Приложение отвечает за освобождение памяти, выделенной ранее для этого параметра. Пример:
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;
См. также раздел