powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / thread & memory
25 сообщений из 57, страница 1 из 3
thread & memory
    #33563254
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
столкнулся с непонятной проблемой - в цикле по наступлению некого события создаю выделяю память malloc и создаю нить, в которую и передаю указатель, а там уже она освобождается. так в task manager'е объем занимаемой памяти растет постоянно. более того, даже если в цикле последовательно много раз выполняется malloc/free наблюдается такая же картина (каждый раз выделялся один объем - для эксперимента). в чем проблема?
...
Рейтинг: 0 / 0
thread & memory
    #33563256
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Память надо выделять внутри нити, а не снаружи.
...
Рейтинг: 0 / 0
thread & memory
    #33563259
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему внутри? какая разница где ее выделили?
...
Рейтинг: 0 / 0
thread & memory
    #33563263
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что память принадлежит той нити в которой ее выделили.
...
Рейтинг: 0 / 0
thread & memory
    #33563266
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlПамять надо выделять внутри нити, а не снаружи.я передаю указатель на нее, этого достаточно. потом как объяснить более того, даже если в цикле последовательно много раз выполняется malloc/free наблюдается такая же картина (каждый раз выделялся один объем - для эксперимента).
тут нитями и не пахло.
...
Рейтинг: 0 / 0
thread & memory
    #33563268
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так Виндовс устроена. Если память запрошена и даже правильно освобождена, ОС резервирует его за процессом, на случай если опять запросит. Освобождается она фактически, когда процесс закрывается или, если это ГУИ - минимизировать главное окно программы. Память нужно выделять большим куском и не дергаться потом.
...
Рейтинг: 0 / 0
thread & memory
    #33563270
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic HunterА так Виндовс устроена. Если память запрошена и даже правильно освобождена, ОС резервирует его за процессом, на случай если опять запросит. Освобождается она фактически, когда процесс закрывается или, если это ГУИ - минимизировать главное окно программы. Память нужно выделять большим куском и не дергаться потом.не могу так :(. а принудительно ее освободить можно (_heapmin не помогает)?
...
Рейтинг: 0 / 0
thread & memory
    #33563271
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic Hunterна случай если опять запросит дык я повторно столько же запрашиваю - почему еще выделяет, а не ту же использует?
...
Рейтинг: 0 / 0
thread & memory
    #33563276
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй heapalloc, heapfree иеже с ними. malloc - не обеспечивает оптимального управления памятью и считается устаревшей. Но, думаю, даже так от фрагментации памяти никуда не денешся, память будет уходить. Так-что большой кусок и не освобождать его до конца.

Всего
...
Рейтинг: 0 / 0
thread & memory
    #33563280
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitvsh Relic Hunterна случай если опять запросит дык я повторно столько же запрашиваю - почему еще выделяет, а не ту же использует?Патамушта ты ее не просишь, а просишь новую. Раз выделивши память, запомнил адрес и все последующие вызовы делай через realloc , по запомненному адресу. Память должна переиспользоваться.
...
Рейтинг: 0 / 0
thread & memory
    #33563530
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как тогда быть с этимв цикле по наступлению некого события выделяю память malloc и создаю нить, в которую и передаю указатель, а там уже она освобождаетсяглавную нить нельзя задерживать до тех пор пока обрабатывается в новой (да и смысла ее создания тогда нет) :(
...
Рейтинг: 0 / 0
thread & memory
    #33564182
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда я-бы сделал пул адресов дин. выделяемой памяти, ну, скажем, 10-20 и раздавал бы их через критические секции. Тоесть передаеш треду адрес пула, ну а тред в CS берет-пользует-снимает блокировку с адреса в пуле. Иначе твою програму будет пучить по памяти.
...
Рейтинг: 0 / 0
thread & memory
    #33564411
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это только в винде так или в юниксах тоже такое?
...
Рейтинг: 0 / 0
thread & memory
    #33564701
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitvshэто только в винде так или в юниксах тоже такое?
Это только в форточках
Если мне не изменяет память, то есть какая-то ф-ция в вин, типа freeall - вот она-то и работает как нормальная free

Насчет, что malloc устаревшая - сами придумали?
Это обычная функция, которая кстати описана в POSIX
Обычно в C используют malloc/free , а в C++ - new/delete
...
Рейтинг: 0 / 0
thread & memory
    #33565548
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlпотому что память принадлежит той нити в которой ее выделили.

Это ты сгарича. Память принадлежит процессу. Однако действительно внутри CRTL может быть такая реализация, что пулы памяти выделяются для каждого tread отдельно, в своем пуле. Выход - не использовать C/C++ выделение памяти, а пользоваться системными API для этого.
...
Рейтинг: 0 / 0
thread & memory
    #33566876
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

Ну ты блин насоветуешь... откуда такая информация? Куча одна для всего процесса, если нужно организовать локальные для процесса объекты используется TLS (thread local storage)
...
Рейтинг: 0 / 0
thread & memory
    #33568474
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri MasterZiv

Ну ты блин насоветуешь... откуда такая информация? Куча одна для всего процесса, если нужно организовать локальные для процесса объекты используется TLS (thread local storage)

Это не я советую. Про TLS тут речи вроде бы не шло, поскольку товарисчу нужно наоборот, именно разделяемую память иметь в двух тредах.

А вообще тут много было грязных инсинуаций на тему выделения памяти.
...
Рейтинг: 0 / 0
thread & memory
    #33572933
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делаю
Код: plaintext
memcpy(&conf[ 0 ].orig,orig,sizeof(OrigList));
где под conf память выделялась malloc в головном треде, а orig локальная переменная - сразу скачок в таск манагере на 4Кб. причем такое же бывает и на strcmp, strncmp, memcmp, почему???
...
Рейтинг: 0 / 0
thread & memory
    #33573363
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сразу скачок в таск манагере на 4Кб

это нормально - ведь память выделяется в страницах
...
Рейтинг: 0 / 0
thread & memory
    #33573409
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин неправильно прочитал вопрос, сорри :(
...
Рейтинг: 0 / 0
thread & memory
    #33573838
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitvshстолкнулся с непонятной проблемой - в цикле по наступлению некого события создаю выделяю память malloc и создаю нить, в которую и передаю указатель, а там уже она освобождается. так в task manager'е объем занимаемой памяти растет постоянно. более того, даже если в цикле последовательно много раз выполняется malloc/free наблюдается такая же картина (каждый раз выделялся один объем - для эксперимента). в чем проблема?Посмотри, может это как-то поможет...
...
Рейтинг: 0 / 0
thread & memory
    #33573878
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запускаю RamCleaner - сразу освобождает добрую часть памяти (треть), сжираемую процессом
...
Рейтинг: 0 / 0
thread & memory
    #33573883
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
memcpy, strcmp, strncmp, memcmp..... Я думаю, что это стек. Под него, как-известно 1 метр резервируется, по умолчанию. И, далее, по мере необходимости по странице винда выделяет при вызове ф-ций, назад смысла нет возвращать. Так что здесь все в норме.
...
Рейтинг: 0 / 0
thread & memory
    #33573892
vitvsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а освобождать как ее?
...
Рейтинг: 0 / 0
thread & memory
    #33573893
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitvshзапускаю RamCleaner - сразу освобождает добрую часть памяти (треть), сжираемую процессомВозможно стековая и возвращается на родину.
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / thread & memory
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]