mengalokasikan atribut
Atribut ACF [alokasikan] memungkinkan Anda menyesuaikan alokasi memori dan dealokasi untuk jenis yang ditentukan dalam file IDL.
typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;
-
daftar opsi alokasi
-
Menentukan satu atau beberapa opsi alokasi memori. Pilih salah satu dari single_node atau all_nodes, atau salah satu dari gratis atau dont_free, atau satu dari setiap pasangan. Saat Anda menentukan lebih dari satu opsi, pisahkan opsi dengan koma.
-
type-attribute-list
-
Menentukan atribut jenis ACF opsional lainnya. Saat Anda menentukan lebih dari satu atribut jenis, pisahkan opsi dengan koma.
-
type-name
-
Menentukan jenis yang ditentukan dalam file IDL.
Atribut [alokasikan] memiliki opsi yang valid berikut.
Opsi | Deskripsi |
---|---|
all_nodes | Melakukan satu panggilan untuk mengalokasikan dan membebaskan memori untuk semua simpul. |
single_node | Melakukan banyak panggilan individu untuk mengalokasikan dan membebaskan setiap simpul memori. |
Gratis | Membebaskan memori saat kembali dari stub server. |
dont_free | Tidak membebaskan memori saat kembali dari stub server. |
Secara default, stub dapat mengalokasikan penyimpanan untuk data yang dirujuk oleh pointer unik atau penuh dengan memanggil midl_user_allocate dan midl_user_free satu per satu untuk setiap pointer.
Anda dapat mengoptimalkan kecepatan aplikasi dengan menentukan opsi all_nodes. Opsi ini mengarahkan stub untuk menghitung ukuran semua memori yang direferensikan melalui penunjuk jenis yang ditentukan dan untuk melakukan satu panggilan ke midl_user_allocate. Stub melepaskan memori dengan melakukan satu panggilan ke midl_user_free.
Opsi dont_free mengarahkan pengkompilasi MIDL untuk menghasilkan stub server yang tidak memanggil midl_user_free untuk jenis yang ditentukan. Opsi dont_free memungkinkan struktur penunjuk untuk tetap dapat diakses oleh aplikasi server setelah panggilan prosedur jarak jauh selesai dan dikembalikan ke klien.
Atribut [alokasikan] akan menyebabkan parameter [masuk, keluar] yang merupakan penunjuk ke jenis yang memenuhi syarat dengan opsi all_nodes untuk mengalokasikan ulang memori ketika data tidak diremarshalasi. Adalah tanggung jawab aplikasi untuk membebaskan memori yang dialokasikan sebelumnya untuk parameter ini. Contohnya:
typedef struct thistype
{
[string] char * PTHISTYPE;
} * PTHISTYPE
HRESULT proc1 ( [in,out] PTHISTYPE * ppthistype);
Jenis data PTHISTYPE akan dialihkan ke arah [out] oleh pangkal sebelum membatalkan nama. Oleh karena itu, aplikasi harus membebaskan memori yang sebelumnya dialokasikan untuk data parameter ini, atau kebocoran memori akan terjadi.
/* ACF file */
typedef [allocate(all_nodes, dont_free)] PTYPE1;
typedef [allocate(all_nodes)] PTYPE2;
typedef [allocate(dont_free)] PTYPE3;