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].) |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk