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;

Parameter

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.

Keterangan

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.

Contoh

/* ACF file */ 
typedef [allocate(all_nodes, dont_free)] PTYPE1; 
typedef [allocate(all_nodes)] PTYPE2; 
typedef [allocate(dont_free)] PTYPE3;

Lihat juga

File Konfigurasi Aplikasi (ACF)

In

midl_user_allocate

midl_user_free

Out ekspres

typedef