Freigeben über


Verwaister Arbeitsspeicher

Wenn Ihre verteilte Anwendung einen Zeigerparameter [ in, out, unique] oder [in, out, ptr] verwendet, kann die Serverseite der Anwendung den Wert des Zeigerparameters in NULL ändern. Wenn der Server anschließend den NULL-Wert an den Client zurückgibt, ist der Speicher, auf den der Zeiger vor dem Remoteprozeduraufruf verweist, auf clientseitig weiterhin vorhanden, aber von diesem Zeiger aus nicht mehr zugänglich (außer bei einem aliasierten vollständigen Zeiger). Dieser Speicher soll verwaist sein. Dies wird auch als Speicherverlust bezeichnet. Das wiederholte Verwaisten des Arbeitsspeichers auf dem Client führt dazu, dass dem Client die verfügbaren Arbeitsspeicherressourcen ausgehen.

Arbeitsspeicher kann auch verwaist werden, wenn der Server einen eingebetteten Zeiger in einen NULL-Wert ändert. Wenn der Parameter beispielsweise auf eine komplexe Datenstruktur wie eine Struktur verweist, kann die Serverseite der Anwendung Knoten der Struktur löschen und Zeiger innerhalb der Struktur auf NULL festlegen.

Eine weitere Situation, die zu einem Speicherverlust führen kann, sind konforme, variierende und offene Arrays, die Zeiger enthalten. Wenn die Serveranwendung den Parameter ändert, der die Arraygröße oder den übertragenen Bereich angibt, sodass er einen kleineren Wert darstellt, verwenden die Stubs die kleineren Werte, um Arbeitsspeicher freizugeben. Die Arrayelemente mit Indizes, die größer als der size-Parameter sind, sind verwaist. Ihre Anwendung muss Elemente außerhalb des übertragenen Bereichs freigeben.