Memóriafoglalási szabályok összegzése
Az alábbi táblázat összefoglalja a memóriafoglalásra vonatkozó legfontosabb szabályokat.
MIDL elem | Leírás |
---|---|
Felső szintű [ újraf] mutatói | Nem null értékű mutatónak kell lennie. |
Függvény visszaadott értéke | A mutató visszaadott értékeihez mindig új memória van lefoglalva. |
[ egyedi, ] vagy [ ptr, out] mutató | A MIDL nem engedélyezi. |
Nem legfelső szintű [egyedi, , ki] vagy [ptr, be, ki] mutató, amely nullról nem null értékűre változik | Az ügyfélcsomók új memóriát foglalnak le az ügyfélen cserébe. |
Nem legfelső szintű [egyedi, , ki] mutatót, amely nem nullról nullra változik | A memória árva az ügyfélen; az ügyfélalkalmazás felelős a memória felszabadításáért és a szivárgások megelőzéséért. |
Nem legfelső szintű [ptr, , ki] mutató, amely nem nullról nullra változik | A memória árva lesz az ügyfélen, ha nincs aliasa; ebben az esetben az ügyfélalkalmazás feladata a memóriavesztés felszabadítása és megakadályozása. |
[ref] mutatói | Az ügyfél-alkalmazás réteg általában le van foglalva. |
Nem null [, ] mutató | A csonkok a meglévő tárolóba próbálnak írni az ügyfélen. Ha [sztring] és mérete meghaladja az ügyfél által lefoglalt méretet, az gp-hibát okoz a visszatéréskor. |
Az alábbi táblázat összefoglalja a kulcsazonosítók és az ACF attribútumok memóriafelügyeletre gyakorolt hatását.
MIDL-funkció | Ügyfélproblémák | Kiszolgálói problémák |
---|---|---|
[ (single_node)], [allocate(all_nodes)] | Meghatározza, hogy a rendszer egy vagy több hívást indít-e a memóriafüggvényekre. | Ugyanaz, mint az ügyfél, kivéve a magánmemóriát, gyakran használhatók a (single_node) [in] és [in,out] adatok lefoglalásához. |
[allocate(free)] vagy [allocate(dont_free)] | (Nincs; hatással van a kiszolgálóra.) | Meghatározza, hogy a kiszolgálón lévő memória felszabadítva legyen-e minden távoli eljáráshívás után. |
tömbattribútumok [ max_is] és [ size_is] | (Nincs; hatással van a kiszolgálóra.) | Meghatározza a lefoglalni kívánt memória méretét. |
[ byte_count] | Az ügyfélnek le kell foglalnia a puffert; az ügyfélcsomók nem osztják ki vagy szabadítják fel. | Az ACF paraméterattribútum határozza meg a kiszolgálón lefoglalt puffer méretét. |
[ enable_allocate] | Általában nincs. Előfordulhat azonban, hogy az ügyfél más memóriakezelési környezetet használ. | A kiszolgáló más memóriakezelési környezetet használ. RpcSmAllocate kell használni a foglalásokhoz. |
[]attribútumban | Az adatok memóriájának kiosztásáért felelős ügyfélalkalmazás. | A kiszolgálón csonkok osztják ki. |
[ ki] attribútum | Az ügyfélen csonkok osztják ki. | []-only mutatónak [hiv] mutatónak kell lennie; a kiszolgálón csonkok osztják ki. |
[ hiv] attribútum | A mutató által hivatkozott memóriát az ügyfélalkalmazásnak kell lefoglalnia. | Felső szintű és első szintű referenciamutatók, amelyeket csonkok kezelnek. |
[ egyedi] attribútum | A null érték nélküli érték árva memóriát eredményezhet; nullról nem null értékűre, ezért az ügyfél csonkja meghívja midl_user_allocate. | (Érinti az ügyfelet.) |
[ ptr] attribútum | (Lásd: [egyedi].) | (Lásd: [egyedi].) |