Здравствуйте. Подключаю в проект VC 2 файла, сгенерированные omniidl. Собираю и запускаю проект — все ОК. При завершении программы в окне Debug сообщение Detected memory leaks и далее внушительный список строк с перечислением блоков памяти. idl компилирую — omniidl -bcxx my_idl.idl. Как побороть утечку памяти? Заранее спасибо.
Вообще говоря, в omniorb утечек нет. можно посмотреть специальными утилитами. Просто орб создает на куче ряд статических объектов, которые создаются один раз. Они живут всегда, пока работает программа. В списке рассылки omniorb эта проблема обсуждалась. посмотри архивы. Там есть другие грабли, связанные с утечкой памяти. Ты какую версию используешь?
Здравствуйте, scaramush, Вы писали:
S>Вообще говоря, в omniorb утечек нет. можно посмотреть специальными утилитами. Просто орб создает на куче ряд статических объектов, которые создаются один раз. Они живут всегда, пока работает программа. В списке рассылки omniorb эта проблема обсуждалась. посмотри архивы. Там есть другие грабли, связанные с утечкой памяти. Ты какую версию используешь?
Версия 3.0. Не нашел я, к сожалению, ответ на свой вопрос в архивах.
Если в omniorb утечек нет, то что мне тогда выдает VC?
DII>Версия 3.0. Не нашел я, к сожалению, ответ на свой вопрос в архивах. DII>Если в omniorb утечек нет, то что мне тогда выдает VC?
Если ты создал объект в куче, но один раз, он у тебя глобальный, если orb работает, и при этом дополнительные объекты не выделяются, то утечек нет. VC будет диагностировать утечку памяти в любом случае, если ты создал объект на куче и не удалил его.
В 3.0 есть действительно грабли с утечкой памяти. Если используешь динамически линкованную библиотеку, то там объекты executor'ы выделяются в куче приложения, а orb пытается удалить удалить их в куче библиотеки. соотвественно память утекает. Это особенно было видно при запуске DEBUG версии под отладчиком. По этому поводу была ругать в рассылке, но вроде авторы отлаились и забили. Я решил эту проблему прилинковав orb статически.
Здравствуйте, scaramush, Вы писали:
S>Если ты создал объект в куче, но один раз, он у тебя глобальный, если orb работает, и при этом дополнительные объекты не выделяются, то утечек нет. VC будет диагностировать утечку памяти в любом случае, если ты создал объект на куче и не удалил его.
Все дело в том, что я вообще ничего не создаю!! Т.е. обнаружив утечку памяти в рабочем проекте, я естественно решил ее отловить. Для этого создал пустой MFC dialog based проект. Изменил свойства проекта, как указано в OmniOrb Readme. Подключил к проекту нужные lib'ы. Подключил файл my_object.cc в проект (который получился при компиляции idl), собрал его и запустил. При выходе из программы — утечка памяти. Удаляю файл my_object.cc из проекта, делаю rebuild — все ОК.
S>В 3.0 есть действительно грабли с утечкой памяти. Если используешь динамически линкованную библиотеку, то там объекты executor'ы выделяются в куче приложения, а orb пытается удалить удалить их в куче библиотеки. соотвественно память утекает. Это особенно было видно при запуске DEBUG версии под отладчиком. По этому поводу была ругать в рассылке, но вроде авторы отлаились и забили. Я решил эту проблему прилинковав orb статически.
БЛИН!!!
Это не утечка памяти! Все объекты гарантировано создаются один раз!!!! При корректной программе при выходе их ВСЕГДА одно и то же количество!!! Для отлова остальных утечек пользуйтесь BoundsChecker'ом.
Здравствуйте, DenisII, Вы писали:
DII>Здравствуйте, scaramush, Вы писали:
S>>В 3.0 есть действительно грабли с утечкой памяти. Если используешь динамически линкованную библиотеку, то там объекты executor'ы выделяются в куче приложения, а orb пытается удалить удалить их в куче библиотеки. соотвественно память утекает. Это особенно было видно при запуске DEBUG версии под отладчиком. По этому поводу была ругать в рассылке, но вроде авторы отлаились и забили. Я решил эту проблему прилинковав orb статически.
А у меня такая же беда и с omniORB-4.0.1. Поэтому тоже приходится линковаться статически .
DII>Да я и подгружаю dll статически.
ОГО!? Подгружать динамическую библиотеку статически??? — Это что-то новое!