Я занимаюсь разработкой программы, которая занимается графическим рендерингом. Я использую третий. сторонняя библиотека для рендеринга, поэтому все, что я делаю, - это создаю объекты и запрашиваю их рендеринг из библиотеки. Загрузка и освобождение ресурсов, таких как текстуры и шрифты, осуществляется этой библиотекой. Моя программа работает на QNX 7.
Моя проблема в том, что после того, как я запустил программу в течение некоторого времени (что не так много), я вижу, что память, используемая процессом, растет довольно быстро, что не в порядке. В моей программе я много изменяю графический контент, что заставляет программу загружать новые изображения и шрифты и выгружать те, которые не используются в настоящее время. Вся эта обработка выполняется кодом из сторонней библиотеки, и я могу поместить свой собственный код, чтобы убедиться, что выделенная память освобождена - у библиотеки, о которой я говорю, есть методы, которые отображают, сколько используется памяти ЦП и GPU, а также методы для освобождения памяти. Я могу отобразить текущую используемую память, вызвать метод, чтобы освободить память, а затем снова распечатать использованную память. Я вижу, что использованная память упала, чего я и ожидаю.
Я использую команду pidin mem для отображения используемой памяти каждого процесса. Я могу видеть, что мой процесс очищает память, когда я вызываю 3-й. функция партийной библиотеки. Тем не менее, он не может очистить достаточно памяти.
То, что я увидел в выводе pidin mem , это множество блоков, которые называются "** unlinked **". Ниже приведена часть вывода, который я получил из pidin :
163879 1 MyGraphApp 12r SIGWAITINFO 0 175M 32K(516K)*
libm.so.3 @ b52a000 96K 4096
libstdc++.so.6 @ b544000 1044K 4096
libsocket.so.3 @ b716000 124K 4096
**unlinked** @24d90000 ( 0) 2048K
**unlinked** @24f90000 ( 0) 128K
**unlinked** @24fb0000 ( 0) 128K
**unlinked** @24fd0000 ( 210000) 64K
**unlinked** @24fe0000 ( 0) 128K
**unlinked** @25000000 ( 0) 128K
**unlinked** @25020000 ( 21f000) 4096
**unlinked** @25021000 ( 21f000) 36K
**unlinked** @2502a000 ( 0) 5400K
**unlinked** @25570000 ( 235000) 6164K
**unlinked** @25b75000 ( 227000) 28K
**unlinked** @25b7c000 ( 22d000) 8192
**unlinked** @25b7e000 ( 0) 128K
**unlinked** @25b9e000 ( 0) 128K
**unlinked** @25bbe000 ( 840000) 60K
**unlinked** @25bcd000 ( 22e000) 4096
**unlinked** @25bce000 ( 850000) 5804K
**unlinked** @26179000 ( 22e000) 28K
Как вы можете видеть, мое приложение использует 175 МБ памяти. Когда я запускаю приложение в начале, эта память меньше 100 МБ. Я вижу, что единственная часть, которая растет, это эти "** несвязанные **" блоки.
Что это за "** несвязанная **" память? Насколько я понимаю, это память, которая была освобождена, но не возвращена в ОС. Верно ли мое понимание?
Самое главное - можно ли освободить память, помеченную как "** unlinked **"? Кто несет ответственность за это - мое приложение и, возможно, код из сторонней библиотеки или самой ОС? Любая информация, касающаяся этой проблемы и как она может быть исправлена, будет высоко оценена.
PS: Я хочу упомянуть, что третье. Библиотека Party и мое приложение разработаны с использованием C ++.
С наилучшими пожеланиями