Библиотека DLL / SO, как память библиотеки связана с вызывающим процессом? - PullRequest
4 голосов
/ 28 августа 2011

Я читал, что вся память процесса освобождается ОС, когда процесс завершается (любыми средствами), поэтому отрицается необходимость вызывать каждый dtor по очереди.

Теперь мой вопрос - как памятьDLL или SO относятся к очистке выделенной памяти?

Я спрашиваю, потому что, вероятно, в конечном итоге я буду использовать Java и / или C # для вызова DLL C ++ с некоторыми статическими функциями стиля C, которые будутвыделить объекты C ++ в куче.Извините, если я увлекся потоком куча против стека, я чувствую, что упустил из виду концепцию _ _ кучи (то есть только одной).

Есть ли другие потенциальные ловушки для утечек памяти при использовании библиотек?

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Библиотека становится частью процесса, когда она загружается.Что касается очистки памяти, дескрипторов, ресурсов и т. Д., Система не различает, были ли они созданы в исполняемом образе или библиотеке.

1 голос
/ 28 августа 2011

Вам не о чем беспокоиться.Загрузчик операционной системы позаботится об этом.

В общем случае разделяемые библиотеки будут видны для адресного пространства вашего процесса с помощью отображения памяти (все выполняется загрузчиком), а ОС отслеживает, сколько еще процессовнужна данная общая библиотека.Данные о состоянии, которые требуются отдельно для каждого процесса, обычно обрабатываются методом копирования при записи, поэтому нет никакой опасности, что ваша крипто-библиотека может случайно использовать ключ другого процесса :-) Короче, не беспокойтесь.

Редактировать. Возможно, вам интересно, что произойдет, если ваша библиотечная функция вызывает malloc() и не очищает.Ну, код библиотеки становится частью вашего процесса, так что на самом деле ваш процесс запрашивает память, и поэтому, когда ваш процесс завершается, ОС очищается как обычно.

...