Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

Увеличивается память с каждой итерацией

03.09.2015, 14:01. Показов 1253. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здорова! Написал программку и че то ниче не ясно, с каждой итерацией увеличивается память на 100 - 200 кб. сжирает оперативы. Это что означает что программка не правильно работает? Я ниче не пойму где она выделяется и постоянно больше и больше, а в отладчику вроде пишет утечек нет, так есть или нет утечек как проверить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.09.2015, 14:01
Ответы с готовыми решениями:

Затруднения с итерацией и подсчетом количеста функций
Подскажите, что не так делаю #include <iostream> #include <conio.h> //для _getch() #include <math.h> //для pow(), sqrt() ...

Трудности с итерацией и подсчетом количеста функций
Возникли трудности в подсчете количества итераций и количества функций #include <iostream> #include<windows.h> ...

В чем разница между Рекурсией и Итерацией?
Рекурсия позволяет сэкономить время но требует больше памяти, а циклы длятся дольше рекурсии но при этом занимают меньше памяти? Я...

13
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.09.2015, 14:04
Цитата Сообщение от ninja2 Посмотреть сообщение
Это что означает что программка не правильно работает?
Смотря какая у нее задача. Может, ей для выполнения каждый раз память новая нужна до определенного периода. Вопрос без ответа, не зная программы.
Цитата Сообщение от ninja2 Посмотреть сообщение
а в отладчику вроде пишет утечек нет
А отладчики могут и не проверять утечки. Да и ничто не утечка, пока процесс не закрылся.
Цитата Сообщение от ninja2 Посмотреть сообщение
так есть или нет утечек как проверить?
Есть программы специальные для этого. Valgrind, например.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.09.2015, 14:08
Цитата Сообщение от Velesthau Посмотреть сообщение
Да и ничто не утечка, пока процесс не закрылся.
Отнюдь. Например, если адрес выделенной памяти не был сохранен, то уже можно говорить об утечке.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.09.2015, 14:09
Цитата Сообщение от Tulosba Посмотреть сообщение
Отнюдь. Например, если адрес выделенной памяти не был сохранен, то уже можно говорить об утечке.
Отнюдь. Ибо "адрес не был сохранен" нельзя отследить программно. Поэтому никакой дебаггер об этом никогда не скажет правильно, пока процесс не завершит свою работу.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
03.09.2015, 14:12  [ТС]
Цитата Сообщение от Velesthau Посмотреть сообщение
А отладчики могут и не проверять утечки. Да и ничто не утечка, пока процесс не закрылся.
Ниче не показывает когда закрываю пишет что все нормально. То обычно мемориликс пишет, а щас ниче не пишет, а память убывает стабильно. А если она так поработает сутки и всю память сожрет?


В цикле получаю COM интерфейсы и что то делаю, потом снова получаю интерфейсы и снова что то делаю. Там один бесконечный внешний цикл и внутри мелких циклов несколько.

Где то какаето переменная остается в памяти без удаления. МБ. BSTR и VARIANT нужно удалять??? Для интерфейсов я вроде все позаменял на CComQIPtr сразу меньше стало памяти убывать, но все рамно убывает.

Добавлено через 2 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
Отнюдь. Например, если адрес выделенной памяти не был сохранен, то уже можно говорить об утечке.
В функции какой то создал интерфейс
IDispatch* pDisp=NULL; и не удалил в конец его вконце и заново эту функцию вызываешь, то памяти больше становится.

Оно тяжело отследить, по 100 кб. через раз добавляется, а где не ясно, где то с внутренних циклов мусор остается.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.09.2015, 14:16
Цитата Сообщение от ninja2 Посмотреть сообщение
Ниче не показывает когда закрываю пишет что все нормально. То обычно мемориликс пишет, а щас ниче не пишет, а память убывает стабильно. А если она так поработает сутки и всю память сожрет?
А нам откуда знать? Твоя программа, ты и проверь по коду - сожрет за сутки всю, или нет.
Цитата Сообщение от ninja2 Посмотреть сообщение
В цикле получаю COM интерфейсы и что то делаю, потом снова получаю интерфейсы и снова что то делаю. Там один бесконечный внешний цикл и внутри мелких циклов несколько.
Освобождай объекты.
Цитата Сообщение от ninja2 Посмотреть сообщение
BSTR и VARIANT нужно удалять???
Да. У меня в коде, например, SysFreeString для освобождения памяти BSTR используется и так далее.
Документацию не читаем? https://msdn.microsoft.com/en-... 6xzx7.aspx
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
03.09.2015, 14:21  [ТС]
Цитата Сообщение от Velesthau Посмотреть сообщение
Да. У меня в коде, например, SysFreeString для освобождения памяти BSTR используется и так далее.
Я мнесто BSTR использую _bstr_t они сами память удаляют но все равно где то утикает. А как проверять что память утикает? Я смотрю в Диспетчере задачь Windows.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.09.2015, 14:28
Цитата Сообщение от ninja2 Посмотреть сообщение
Я мнесто BSTR использую _bstr_t они сами память удаляют но все равно где то утикает. А как проверять что память утикает?
Е-мое, я же написал уже: есть специальные программы - valgrind, Intel Inspector XE, dr memory и т. д.. На английском написать? Please, use special software for detecting memory leaks: valgrind, Intel Inspector XE, dr memory etc.

Добавлено через 2 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
Я мнесто BSTR использую _bstr_t они сами память удаляют но все равно где то утикает.
Если твои _bstr_t каждый раз создаются новые, а старые не выходят из области видимости, то с чего им память очищать?

Добавлено через 2 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
Я смотрю в Диспетчере задачь Windows.
Если библиотеки и софт использовать лень, то у тебя есть код. ты можешь его менять и смотреть, что меняется в потреблении памяти. Так тоже можно найти проблему.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.09.2015, 14:33
Цитата Сообщение от Velesthau Посмотреть сообщение
Ибо "адрес не был сохранен" нельзя отследить программно.
Неужели? Как же тогда GC работают в языках с соответствующей поддержкой?
Или вот даже для C/C++ Boehm GC.
Цитата Сообщение от Velesthau Посмотреть сообщение
Да и ничто не утечка, пока процесс не закрылся.
Но даже если допустить, что нельзя отследить, то наличие утечки и ее выявление это как бы не одно и то же.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.09.2015, 14:43
Цитата Сообщение от Tulosba Посмотреть сообщение
Неужели? Как же тогда GC работают в языках с соответствующей поддержкой?
А ты почитай, как они работают. И с чистыми ли адресами и API.
Цитата Сообщение от Tulosba Посмотреть сообщение
Но даже если допустить, что нельзя отследить
Если ты допускаешь, что отследить можно, то пиши сюда название дебаггера, определяющего утечки во время работы программы, я тебе скину код, где он это сделает неправильно.
Цитата Сообщение от Tulosba Посмотреть сообщение
то наличие утечки и ее выявление это как бы не одно и тоже.
Хорошо, эксперт С++, давай поиграем в слова Наличие утечки определяется логикой программы, поэтому дебаггером не может быть выявлена. Кстати, процитировано было сообщение именно про дебаггер, ты вырвал его из конктекста, но фиг с тобой. Пока логика программы нам не известна - как в данной теме, никакое выделение памяти не может быть утечкой. Даже если оно в бесконечном цикле. Либо, в противном случае, любое выделение - это утечка.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.09.2015, 15:24
Цитата Сообщение от Velesthau Посмотреть сообщение
А ты почитай, как они работают.
А ты меня просвети. И про чистоту адресов и API в том числе.
Цитата Сообщение от Velesthau Посмотреть сообщение
Если ты допускаешь, что отследить можно
При наличии менеджера более высокого уровня безусловно.
Цитата Сообщение от Velesthau Посмотреть сообщение
Кстати, процитировано было сообщение именно про дебаггер, ты вырвал его из конктекста
Если и вырвал, то поверь, отнюдь не специально. Я имел в виду общий случай, поэтому и про GC сказал.
Цитата Сообщение от Velesthau Посмотреть сообщение
Пока логика программы нам не известна - как в данной теме, никакое выделение памяти не может быть утечкой.
Выделение памяти никогда не является утечкой, утечкой будет невозможность ее освобождения в дальнейшем.
Кстати, по поводу утечек уже было не так давно обсуждение.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
03.09.2015, 21:32  [ТС]
так чем лучше проверить на утечку памяти программу? Обычный дебаг не выявляет. Мб. у меня и нету утечки. Хотя щас смотрю за минут 10 работы программы было 15 мб, а стало 27, 12 мб. утикло. Нада программкой протестить, А мб. то не мои бока, а сам ком компонент память жрет?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.09.2015, 21:46
Цитата Сообщение от ninja2 Посмотреть сообщение
Хотя щас смотрю за минут 10 работы программы было 15 мб, а стало 27, 12 мб. утикло.
Ну, а сколько твоя программа должна работать? Если бесконечно долго, то поставь на ночной прогон для начала.
Нагрузи ее входными данными как следует, чтобы она действительно работала, а не висела в ожидании. Пока размер отожранной памяти тебя устраивает, можешь вообще забить болт на поиск каких-либо утечек.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
03.09.2015, 21:50  [ТС]
Та хотелось чтобы показывало где утечки в программе, есть какие то вроде макросы в MFC или уже не помню что их добавляешь к коду и тогда начинают ошибки выводится что память уходит вроде.

Та поставлю. наверно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.09.2015, 21:50
Помогаю со студенческими работами здесь

Проверить, как организована память в двумерном массиве. Сделать сдвиг вправо для каждой строчки двумерного мас
Проверить, как организована память в двумерном массиве. Сделать сдвиг вправо для каждой строчки двумерного массива, используя указатели.

Скрипт выполняется медленнее с каждой итерацией
Данный скрипт предназначен для обработки данных таблицы и вставки этих самых обработанных данных в другую новую таблицу. <?php ...

Как заставить цикл присваивать новое значение с каждой итерацией?
Доброго времени суток. Помогите, пожалуйста, понять как при прохождении очередной итерации присваивать значение переменной следующему...

Асинхронный клиент и утечка памяти: раз в минуту память скачком увеличивается на 10-20 кб
Клиент асинхронный, считываю данные по 1ному байту в пакет с помощью BeginReceive и каллбака. Работает все отлично, но рас в минуту память...

Программа с каждой секундой увеличивает занимаемую память
Программа с каждой секундой увеличивает занимаемую память. Сделал таймер, в который вписываешь время, и ,при наступлении данного времени,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru