Freigeben über


Zusammenfassung der Speicherzuordnungsregeln

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

MIDL-Element Beschreibung
[Bezug] Zeiger der obersten Ebene Muss nicht NULL-Zeiger sein.
Rückgabewert der Funktion Neuer Speicher wird immer für Zeigerrücklaufwerte zugewiesen.
[ eindeutigen, ] oder [ ptr, out] Zeiger] Nicht zulässig von MIDL.
Nicht oberste Ebene [eindeutigen, in, ] oder [ptr, in, out] Zeiger, der sich von Null in ungleich Null ändert Client-Stubs weisen beim Zurückgeben neuen Speicher auf dem Client zu.
Nicht oberste Ebene [eindeutigen, in, ] Zeiger, der sich von ungleich Null in Null ändert Der Speicher ist auf dem Client verwaist; Die Clientanwendung ist dafür verantwortlich, Arbeitsspeicher freizugeben und Lecks zu verhindern.
Nicht oberste Ebene [ptr, in, out] Zeiger, der sich von ungleich Null in Null ändert Speicher wird auf dem Client verwaist, wenn kein Alias vorhanden ist. Die Clientanwendung ist dafür verantwortlich, Speicherverluste in diesem Fall freizugeben und zu verhindern.
[Verweis] Zeiger Clientanwendungsebene wird in der Regel zugewiesen.
Ungleich NULL [in, ] Zeiger Stubs versuchen, in vorhandenen Speicher auf dem Client zu schreiben. Wenn [Zeichenfolge] und die Größe über die auf dem Client zugewiesene Größe hinaus zunimmt, führt dies zur Rückgabe eines GP-Fehlers.

 

In der folgenden Tabelle sind die Auswirkungen von Schlüssel-IDL- und ACF-Attributen auf die Speicherverwaltung zusammengefasst.

MIDL-Funktion Clientprobleme Serverprobleme
[ (single_node)], [allocate(all_nodes)] Bestimmt, ob ein oder mehrere Aufrufe an die Speicherfunktionen vorgenommen werden. Identisch mit dem Client, mit Ausnahme des privaten Speichers, kann häufig für die Zuordnung (single_node) [in] und [in,out]-Daten verwendet werden.
[Zuweisung(frei)] oder [Zuweisung(dont_free)] (Keine; wirkt sich auf den Server aus.) Bestimmt, ob der 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 zuzuordnenden Arbeitsspeichers.
[ byte_count] Der Client muss Puffer zuweisen; nicht von Client-Stubs zugewiesen oder freigegeben. Das ACF-Parameter-Attribut bestimmt die Größe des auf dem Server zugeordneten Puffers.
[ enable_allocate] In der Regel keine. Der Client verwendet jedoch möglicherweise eine andere Speicherverwaltungsumgebung. Server verwendet eine andere Speicherverwaltungsumgebung. rpcSmAllocate sollte für Zuordnungen verwendet werden.
[ in]-Attribut Clientanwendung, die für die Zuordnung des Speichers für Daten verantwortlich ist. Von Stubs auf dem Server zugewiesen.
[ ] Attribut Zugewiesen auf dem Client durch Stubs. []-zeiger muss [Bezug] Zeiger sein; von Stubs auf dem Server zugewiesen.
[ Ref] Attribut Der vom Zeiger referenzierte Speicher muss von der Clientanwendung zugewiesen werden. Von Stubs verwaltete Referenzzeiger auf oberster Ebene und Referenzzeiger der ersten Ebene.
[ eindeutiges] Attribut Nicht null bis NULL kann zu verwaisten Arbeitsspeicher führen; null zu ungleich null bewirkt, dass der Client-Stub midl_user_allocateaufruft. (Wirkt sich auf den Client aus.)
[ ptr] Attribut (Siehe [ eindeutige].) (Siehe [ eindeutige].)