Zusammenfassung der Speicherzuordnungsregeln
In der folgenden Tabelle sind die wichtigsten Regeln für die Speicherzuweisung zusammengefasst.
| MIDL-Element | BESCHREIBUNG |
|---|---|
| [ Ref-Zeiger der obersten ] Ebene | Muss Nicht-NULL-Zeiger sein. |
| Rückgabewert der Funktion | Für Zeiger-Rückgabewerte wird immer neuer Arbeitsspeicher zugeordnet. |
| [unique, out ] oder [ ptr, ] out-Zeiger | Von MIDL nicht zulässig. |
| Eindeutiger Zeiger auf nicht oberster Ebene in , out oder [ ] [ ptrin , out-Zeiger, der von NULL in ] Nicht-NULL geändert wird | Clientstubs weisen bei der Rückgabe neuen Arbeitsspeicher auf dem Client zu. |
| Eindeutiger Zeiger auf nicht [ oberster Ebene in, der von Null in ] NULL geändert wird | Der Arbeitsspeicher ist auf dem Client verwaist. Die Clientanwendung ist dafür verantwortlich, Arbeitsspeicher frei zu geben und Lecks zu verhindern. |
| Nicht-Ptr der obersten Ebene [ in, out-Zeiger, der sich von ] Nicht-NULL in NULL ändert | Der Arbeitsspeicher ist auf dem Client verwaist, wenn kein Alias verwendet wird. Die Clientanwendung ist in diesem Fall für die Freistellung und Verhinderung von Speicherverlusten verantwortlich. |
| [ref ] Zeiger | Die Clientanwendungsebene wird in der Regel zuteilen. |
| Nicht NULL [ in, ] Out-Zeiger | Stubs versuchen, in vorhandenen Speicher auf dem Client zu schreiben. Wenn [ Zeichenfolge ] und Größe größer als die auf dem Client zugeordnete Größe sind, verursacht dies bei der Rückgabe einen GP-Fehler. |
In der folgenden Tabelle werden die Auswirkungen von Schlüssel-IDL- und ACF-Attributen auf die Speicherverwaltung zusammengefasst.
| MIDL-Feature | Clientprobleme | Serverprobleme |
|---|---|---|
| [allocate _ (einzelner Knoten), ] [ allocate(alle _ Knoten)] | Bestimmt, ob mindestens ein Aufruf der Speicherfunktionen erfolgt. | Identisch mit dem Client, mit der Ausnahme, dass privater Arbeitsspeicher häufig für die Zuordnung (einzelner Knoten) in und _ [ ] [ in,out-Daten verwendet werden ] kann. |
| [allocate(free) ] oder [ allocate(don't _ free)] | (Keine; wirkt sich auf den Server aus.) | Bestimmt, ob nach jedem Remoteprozeduraufruf Arbeitsspeicher auf dem Server frei wird. |
| array attributes [ max is _ and ] size [ _ is] | (Keine; wirkt sich auf den Server aus.) | Bestimmt die Größe des zu reservierten Arbeitsspeichers. |
| [ _ Byteanzahl] | Der Client muss den Puffer zuordnen. wird nicht von Clientstubs zugeordnet oder frei. | Das ACF-Parameterattribut bestimmt die Größe des auf dem Server zugeordneten Puffers. |
| [ _ "Allocate" aktivieren] | In der Regel keine. Der Client verwendet jedoch möglicherweise eine andere Speicherverwaltungsumgebung. | Der Server verwendet eine andere Speicherverwaltungsumgebung. RpcSmAllocate sollte für Zuordnungen verwendet werden. |
| [in ] Attribut | Clientanwendung, die für die Zuweisung von Arbeitsspeicher für Daten verantwortlich ist. | Wird auf dem Server durch Stubs zugeordnet. |
| [out ] Attribut | Wird auf dem Client durch Stubs zugeordnet. | [out ] Der Zeiger "-only" muss [ ein ] Verweiszeiger sein, der auf dem Server durch Stubs zugeordnet wird. |
| [ref ] Attribut | Arbeitsspeicher, auf den vom Zeiger verwiesen wird, muss von der Clientanwendung zugeordnet werden. | Verweiszeiger auf oberster und erster Ebene, die von Stubs verwaltet werden. |
| [unique ] Attribut | Nicht NULL bis NULL kann zu verwaisten Arbeitsspeicher führen. Null bis Nicht-NULL bewirkt, dass der Clientstub midl _ aufruft, der dem Benutzer _ zugibt. | (Wirkt sich auf den Client aus.) |
| [ptr ] Attribut | (Siehe [ eindeutig ] .) | (Siehe [ eindeutig ] .) |