Freigeben über


Zusammenfassung der Speicherbelegungsregeln

In der folgenden Tabelle sind die wichtigsten Regeln für die Speicherbelegung zusammengefasst.

MIDL-Element BESCHREIBUNG
Zeiger auf oberster Ebene [ ref] Muss Nicht-NULL-Zeiger sein.
Rückgabewert der Funktion Für Zeigerrückgabewerte wird immer neuer Arbeitsspeicher zugeordnet.
Zeiger [ eindeutig, out] oder [ ptr, out] Von MIDL nicht zulässig.
Zeiger auf nicht oberster Ebene [eindeutig, in, out] oder [ptr, in, out] , der von NULL zu ungleich NULL geändert wird Clientstubs weisen bei der Rückgabe neuen Arbeitsspeicher auf dem Client zu.
Zeiger auf nicht oberster Ebene [eindeutig, in, out], der von "ungleich NULL" in "NULL" geändert wird Der Arbeitsspeicher ist auf dem Client verwaist. Die Clientanwendung ist für das Freigeben von Arbeitsspeicher und die Verhinderung von Verlusten verantwortlich.
Zeiger auf nicht oberster Ebene [ptr, in, out], der sich von ungleich NULL in NULL ändert Arbeitsspeicher wird auf dem Client verwaist, wenn kein Alias verwendet wird. Die Clientanwendung ist in diesem Fall für das Freigeben und Verhindern von Speicherverlusten verantwortlich.
[ref]-Zeiger Die Clientanwendungsebene wird in der Regel zugeordnet.
Zeiger ungleich NULL [in, out] Stubs versuchen, in vorhandenen Speicher auf dem Client zu schreiben. Wenn [Zeichenfolge] und Größe über die auf dem Client zugeordnete Größe hinaus zunimmt, führt dies bei der Rückgabe zu einem GP-Fehler.

 

In der folgenden Tabelle sind die Auswirkungen der Schlüsselattribute IDL und ACF auf die Speicherverwaltung zusammengefasst.

MIDL-Feature Clientprobleme Serverprobleme
[ allocate(single_node)], [allocate(all_nodes)] Bestimmt, ob ein oder mehrere Aufrufe an die Speicherfunktionen erfolgen. Identisch mit dem Client, mit Ausnahme des privaten Arbeitsspeichers kann häufig für die Zuordnung (single_node) [in] und [in,out] Daten verwendet werden.
[allocate(free)] oder [allocate(dont_free)] (Keine; wirkt sich auf den Server aus.) Bestimmt, ob arbeitsspeicher auf dem Server nach jedem Remoteprozeduraufruf freigegeben wird.
Arrayattribute [ max_is] und [ size_is] (Keine; wirkt sich auf den Server aus.) Bestimmt die Größe des zuzuweisenden Arbeitsspeichers.
[ byte_count] Der Client muss puffern; nicht von Client-Stubs zugeordnet oder freigegeben. Das ACF-Parameterattribute bestimmt die Größe des puffers, der auf dem Server zugeordnet ist.
[ enable_allocate] 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. Zugeordnet auf dem Server durch Stubs.
[ out]-Attribut Zugeordnet auf dem Client durch Stubs. [out]-only-Zeiger muss [ref]-Zeiger sein; zugeordnet auf dem Server durch Stubs.
[ ref]-Attribut Arbeitsspeicher, auf den der Zeiger verweist, muss von der Clientanwendung zugeordnet werden. Verweiszeiger der obersten und ersten Ebene, die von Stubs verwaltet werden.
[ unique]-Attribut Ungleich NULL bis NULL kann zu verwaistem Arbeitsspeicher führen. Null bis null bewirkt, dass der Clientstub midl_user_allocate aufruft. (Wirkt sich auf den Client aus.)
[ ptr]-Attribut (Siehe [ eindeutig].) (Siehe [ eindeutig].)