Распределение, освобождение и управление памятью в Windows с установленными точками останова - PullRequest
3 голосов
/ 30 ноября 2011

У меня есть приложение C ++ с очень странным явлением.

Я запускаю свое приложение на большом входе, и у меня есть много буферов, которые выделяются и выделяются во время выполнения.

Для входных данных, которые достаточно велики, у меня есть ошибка выделения, то есть нехватка памяти.

Но когда я ставлю точку останова на каждое выделение, а затем выполняю от выделения к распределению, мое приложение выигрывает 't crash.

Мое предположение, что это должно быть связано с тем, как Windows XP управляет памятью.У кого-нибудь есть идеи, что может вызвать это явление и как его преодолеть?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

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

0 голосов
/ 30 ноября 2011

Поведение приложения отличается в версиях Release и Debug.Поскольку вы говорите в обычном режиме, это приводит к нехватке памяти, что-то не так с вашим кодом.Можно сказать, что нет памяти или нет непрерывной памяти.

Вы можете использовать статический или динамический анализ кода для выявления проблемы.
IBM Purifier (Пробная версия)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...