На Solaris 10 у меня многопоточный процесс со странным поведением. Он управляет сложными структурами C ++ (RWTVal или RWPtr). Эти структуры построены из данных, хранящихся в базе данных (с использованием Pro * C). Каждый час процесс ищет новую информацию в базе данных, строит новые структуры в памяти и освобождает старые данные. Но каждый раз, когда он повторяет эту процедуру, использование памяти процесса увеличивается на несколько МБ (12/16 МБ). Использование памяти процессом начинается с 100М до 1,4 Гб. Просто к этому моменту кажется, что у процесса есть утечки памяти. Но странное поведение состоит в том, что после этой точки процесс прекращает расти. Когда я пытаюсь найти утечки памяти (используя инструмент Purify), процесс не растет, и никаких существенных утечек не выявлено. Кто-нибудь обнаружил подобное поведение или может объяснить, что может происходить?
Это вероятный что операционная система на самом деле не «выбрасывает» старые страницы памяти, когда вы освобождаете память, потому что тогда приложению будет быстрее выделять больше памяти, если ОС не придется выделять больше страниц. Но только до предела конечно.
Других решений пока нет …