다음을 통해 공유


메모리 고아화

분산 애플리케이션이 [in, out, 고유] 또는 [in, out, 포인터] 포인터 매개 변수를 사용하는 경우, 애플리케이션의 서버 측에서 포인터 매개 변수의 값을 null로 변경할 수 있습니다. 이후에 서버가 클라이언트에 null 값을 반환하면 원격 프로시저 호출 전에 포인터가 참조하는 메모리가 클라이언트 쪽에 계속 있지만 더 이상 해당 포인터에서 액세스할 수 없습니다(별칭이 지정된 전체 포인터의 경우 제외). 이 메모리는 고립된이라고 합니다. 이를 메모리 누수 이라고도 합니다. 클라이언트에서 메모리가 반복적으로 고아 상태가 되면 클라이언트의 사용 가능한 메모리 리소스가 고갈됩니다.

서버가 내장 포인터를 null 값으로 변경할 때마다 메모리가 고아가 될 수도 있습니다. 예를 들어 매개 변수가 트리와 같은 복잡한 데이터 구조를 가리키는 경우 애플리케이션의 서버 쪽은 트리의 노드를 삭제하고 트리 내의 포인터를 null로 설정할 수 있습니다.

메모리 누수로 이어질 수 있는 또 다른 상황에는 포인터를 포함하는 규칙적이고 다양하며 열린 배열이 포함됩니다. 서버 애플리케이션이 배열 크기 또는 전송된 범위를 지정하는 매개 변수를 수정하여 더 작은 값을 나타내면 스텁은 더 작은 값을 사용하여 메모리를 해제합니다. 크기 매개 변수보다 큰 인덱스가 있는 배열 요소는 분리됩니다. 애플리케이션은 전송된 범위를 벗어나는 요소를 해제해야 합니다.