Bagikan melalui


Ringkasan Aturan Alokasi Memori

Tabel berikut ini meringkas aturan utama mengenai alokasi memori.

Elemen MIDL Deskripsi
Pointer [ ref] tingkat atas Harus berupa penunjuk bukan null.
Nilai pengembalian fungsi Memori baru selalu dialokasikan untuk nilai pengembalian pointer.
[ unik, out] atau [ ptr, out] pointer Tidak diizinkan oleh MIDL.
Tingkat non-atas [unik, masuk, keluar] atau [ptr, masuk, keluar] pointer yang berubah dari null ke non-null Stub klien mengalokasikan memori baru pada klien saat dikembalikan.
Penunjuk [unik, masuk, keluar] non-atas yang berubah dari non-null ke null Memori tanpa sumber pada klien; aplikasi klien bertanggung jawab untuk membebaskan memori dan mencegah kebocoran.
Penunjuk [ptr, in, out] tingkat non-atas yang berubah dari non-null ke null Memori akan tanpa sumber pada klien jika tidak diberi alias; aplikasi klien bertanggung jawab untuk membebaskan dan mencegah kebocoran memori dalam kasus ini.
[ref] pointer Lapisan aplikasi klien biasanya mengalokasikan.
Penunjuk [in, out] non-null Stub mencoba menulis ke penyimpanan yang ada pada klien. Jika [string] dan ukuran meningkat melebihi ukuran yang dialokasikan pada klien, itu akan menyebabkan kesalahan GP saat dikembalikan.

 

Tabel berikut ini meringkas efek atribut IDL dan ACF kunci pada manajemen memori.

Fitur MIDL Masalah Klien Masalah server
[ allocate(single_node)], [allocate(all_nodes)] Menentukan apakah satu atau banyak panggilan dilakukan ke fungsi memori. Sama seperti klien, kecuali memori privat sering digunakan untuk mengalokasikan (single_node) [in] dan [in,out] data.
[allocate(free)] atau [allocate(dont_free)] (Tidak Ada; mempengaruhi server.) Menentukan apakah memori pada server dibebaskan setelah setiap panggilan prosedur jarak jauh.
atribut array [ max_is] dan [ size_is] (Tidak Ada; mempengaruhi server.) Menentukan ukuran memori yang akan dialokasikan.
[ byte_count ] Klien harus mengalokasikan buffer; tidak dialokasikan atau dibebaskan oleh stub klien. Atribut parameter ACF menentukan ukuran buffer yang dialokasikan di server.
[ enable_allocate ] Biasanya, tidak ada. Namun, klien mungkin menggunakan lingkungan manajemen memori yang berbeda. Server menggunakan lingkungan manajemen memori yang berbeda. RpcSmAllocate harus digunakan untuk alokasi.
Atribut [ in] Aplikasi klien yang bertanggung jawab untuk mengalokasikan memori untuk data. Dialokasikan di server oleh stub.
Atribut [ out] Dialokasikan pada klien oleh stub. [out]-only pointer harus [ref] pointer; dialokasikan di server oleh stub.
Atribut [ ref] Memori yang dirujuk oleh pointer harus dialokasikan oleh aplikasi klien. Pointer referensi tingkat atas dan tingkat pertama yang dikelola oleh stub.
Atribut [ unik] Non-null ke null dapat mengakibatkan memori tanpa sumber; null ke non-null menyebabkan stub klien memanggil midl_user_allocate. (Mempengaruhi klien.)
Atribut [ ptr] (Lihat [ unik].) (Lihat [ unik].)