Поделиться через


Осиротение памяти

Если ваше распределенное приложение использует [ в, out, уникальные] или [в, out, ptr] параметр указателя, серверная сторона приложения может изменить значение параметра указателя на null. Когда сервер впоследствии возвращает клиенту значение NULL, память, на которую ссылался указатель до удаленного вызова процедуры, по-прежнему присутствует на стороне клиента, но больше недоступна с этого указателя (за исключением случая с алиасом полного указателя). Эта память, как говорят, потерянных. Это также называется утечкой памяти . Повторное отсутствие памяти на клиенте приводит к нехватке доступных ресурсов памяти.

Память также может быть потеряна всякий раз, когда сервер изменяет внедренный указатель на значение NULL. Например, если параметр указывает на сложную структуру данных, например дерево, серверная сторона приложения может удалить узлы дерева и задать указатели внутри дерева значение NULL.

Другая ситуация, которая может привести к утечке памяти, связана с корректными, изменяемыми и открытыми массивами, содержащими указатели. Когда серверное приложение изменяет параметр, указывающий размер массива или переданный диапазон, чтобы оно представляло меньшее значение, стабсы используют меньшие значения для освобождения памяти. Элементы массива с индексами, превышающими параметр размера, являются потерянными. Приложение должно освободить элементы за пределами передаваемого диапазона.