Bagikan melalui


Buffer Stub-Allocated

Daripada memaksa panggilan yang berbeda untuk setiap simpul pohon atau grafik, Anda dapat mengarahkan rintangan untuk menghitung ukuran data dan mengalokasikan dan membebaskan memori dengan melakukan satu panggilan ke midl_user_allocate atau midl_user_free. Atribut ACF [allocate(all_nodes)] mengarahkan stub untuk mengalokasikan atau membebaskan semua simpul dalam satu panggilan ke fungsi manajemen memori yang disediakan pengguna.

Misalnya, aplikasi RPC mungkin menggunakan struktur data pohon biner berikut:

/* 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;

Atribut ACF [alokasikan(all_nodes)] yang diterapkan ke jenis data ini muncul dalam deklarasi typedef di ACF sebagai:

/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;

Atribut [alokasikan] hanya dapat diterapkan ke jenis penunjuk. Atribut ACF [alokasikan] adalah ekstensi Microsoft untuk DCE IDL dan, dengan demikian, tidak tersedia jika Anda mengkompilasi dengan sakelar MIDL /osf . Ketika [alokasikan(all_nodes)] diterapkan ke jenis pointer, stub yang dihasilkan oleh kompilator MIDL melintasi struktur data yang ditentukan untuk menentukan ukuran alokasi. Rintangan kemudian melakukan satu panggilan untuk mengalokasikan seluruh jumlah memori yang diperlukan oleh grafik atau pohon. Aplikasi klien dapat membebaskan memori jauh lebih efisien dengan melakukan satu panggilan ke midl_user_free. Namun, performa server-stub umumnya meningkat saat menggunakan alokasi memori node-by-node karena stub server sering dapat menggunakan memori privat yang tidak memerlukan alokasi.

Untuk informasi tambahan, lihat Alokasi dan Dealokasi Node-by-Node.