|
|
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
столкнулся с непонятной проблемой - в цикле по наступлению некого события создаю выделяю память malloc и создаю нить, в которую и передаю указатель, а там уже она освобождается. так в task manager'е объем занимаемой памяти растет постоянно. более того, даже если в цикле последовательно много раз выполняется malloc/free наблюдается такая же картина (каждый раз выделялся один объем - для эксперимента). в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:05 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Память надо выделять внутри нити, а не снаружи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:07 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
почему внутри? какая разница где ее выделили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:09 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
потому что память принадлежит той нити в которой ее выделили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:12 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
White OwlПамять надо выделять внутри нити, а не снаружи.я передаю указатель на нее, этого достаточно. потом как объяснить более того, даже если в цикле последовательно много раз выполняется malloc/free наблюдается такая же картина (каждый раз выделялся один объем - для эксперимента). тут нитями и не пахло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:15 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
А так Виндовс устроена. Если память запрошена и даже правильно освобождена, ОС резервирует его за процессом, на случай если опять запросит. Освобождается она фактически, когда процесс закрывается или, если это ГУИ - минимизировать главное окно программы. Память нужно выделять большим куском и не дергаться потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:21 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Relic HunterА так Виндовс устроена. Если память запрошена и даже правильно освобождена, ОС резервирует его за процессом, на случай если опять запросит. Освобождается она фактически, когда процесс закрывается или, если это ГУИ - минимизировать главное окно программы. Память нужно выделять большим куском и не дергаться потом.не могу так :(. а принудительно ее освободить можно (_heapmin не помогает)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:24 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Relic Hunterна случай если опять запросит дык я повторно столько же запрашиваю - почему еще выделяет, а не ту же использует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:25 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Попробуй heapalloc, heapfree иеже с ними. malloc - не обеспечивает оптимального управления памятью и считается устаревшей. Но, думаю, даже так от фрагментации памяти никуда не денешся, память будет уходить. Так-что большой кусок и не освобождать его до конца. Всего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 02:52 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvsh Relic Hunterна случай если опять запросит дык я повторно столько же запрашиваю - почему еще выделяет, а не ту же использует?Патамушта ты ее не просишь, а просишь новую. Раз выделивши память, запомнил адрес и все последующие вызовы делай через realloc , по запомненному адресу. Память должна переиспользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 03:33 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
а как тогда быть с этимв цикле по наступлению некого события выделяю память malloc и создаю нить, в которую и передаю указатель, а там уже она освобождаетсяглавную нить нельзя задерживать до тех пор пока обрабатывается в новой (да и смысла ее создания тогда нет) :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 11:40 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Тогда я-бы сделал пул адресов дин. выделяемой памяти, ну, скажем, 10-20 и раздавал бы их через критические секции. Тоесть передаеш треду адрес пула, ну а тред в CS берет-пользует-снимает блокировку с адреса в пуле. Иначе твою програму будет пучить по памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 19:15 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
это только в винде так или в юниксах тоже такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 01:56 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshэто только в винде так или в юниксах тоже такое? Это только в форточках Если мне не изменяет память, то есть какая-то ф-ция в вин, типа freeall - вот она-то и работает как нормальная free Насчет, что malloc устаревшая - сами придумали? Это обычная функция, которая кстати описана в POSIX Обычно в C используют malloc/free , а в C++ - new/delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 16:44 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
White Owlпотому что память принадлежит той нити в которой ее выделили. Это ты сгарича. Память принадлежит процессу. Однако действительно внутри CRTL может быть такая реализация, что пулы памяти выделяются для каждого tread отдельно, в своем пуле. Выход - не использовать C/C++ выделение памяти, а пользоваться системными API для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 13:08 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
MasterZiv Ну ты блин насоветуешь... откуда такая информация? Куча одна для всего процесса, если нужно организовать локальные для процесса объекты используется TLS (thread local storage) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 09:53 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
funikovyuri MasterZiv Ну ты блин насоветуешь... откуда такая информация? Куча одна для всего процесса, если нужно организовать локальные для процесса объекты используется TLS (thread local storage) Это не я советую. Про TLS тут речи вроде бы не шло, поскольку товарисчу нужно наоборот, именно разделяемую память иметь в двух тредах. А вообще тут много было грязных инсинуаций на тему выделения памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 16:37 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
делаю Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 11:19 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
сразу скачок в таск манагере на 4Кб это нормально - ведь память выделяется в страницах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 12:44 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
блин неправильно прочитал вопрос, сорри :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 12:52 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshстолкнулся с непонятной проблемой - в цикле по наступлению некого события создаю выделяю память malloc и создаю нить, в которую и передаю указатель, а там уже она освобождается. так в task manager'е объем занимаемой памяти растет постоянно. более того, даже если в цикле последовательно много раз выполняется malloc/free наблюдается такая же картина (каждый раз выделялся один объем - для эксперимента). в чем проблема?Посмотри, может это как-то поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:27 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
запускаю RamCleaner - сразу освобождает добрую часть памяти (треть), сжираемую процессом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:35 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
memcpy, strcmp, strncmp, memcmp..... Я думаю, что это стек. Под него, как-известно 1 метр резервируется, по умолчанию. И, далее, по мере необходимости по странице винда выделяет при вызове ф-ций, назад смысла нет возвращать. Так что здесь все в норме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:36 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
а освобождать как ее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:38 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshзапускаю RamCleaner - сразу освобождает добрую часть памяти (треть), сжираемую процессомВозможно стековая и возвращается на родину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:38 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
_Балтика vitvshзапускаю RamCleaner - сразу освобождает добрую часть памяти (треть), сжираемую процессомВозможно стековая и возвращается на родину.а можно ее как-то другим способом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:40 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshа освобождать как ее?а зачем ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:41 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshа освобождать как ее?А смысл какокой? Лишний геморой, и нагрузка на ось. Они же никуда не пропадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:44 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас vitvshа освобождать как ее?а зачем ? Posted via ActualForum NNTP Server 1.3ну как бы прога(сервис) за сутки "сжирает" таким образом до 50Мб - как долго проживет машина до падения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:45 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshну как бы прога(сервис) за сутки "сжирает" таким образом до 50Мбесли ты просишь память у ОС, а потом отдаешь ее, то такого не должно быть. Смотри, где-то есть утечки значит Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:48 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Может ДЛЛ-ми какими-то сторонними пользуешься ? Там может быть свой менеджер памяти. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:50 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
в том то и дело что не прошу - всю память выделяю в самом начале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:50 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshну как бы прога(сервис) за сутки "сжирает" таким образом до 50Мб - как долго проживет машина до падения?50М - это явно не стек одного потока :) Извини, конечно, ты хэндлы своих потоков аккуратно закрываешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:51 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Выделяешь в начале, а потом в процессе работы уже не просишь новую ? Тогда увеличению показываемого таксменеджером значения есть предел. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:52 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
автор50М - это явно не стек одного потока :) Извини, конечно, ты хэндлы своих потоков аккуратно закрываешь?да. тот же таск манагер показывает кол-во дескрипторов - оно стабильно. авторВыделяешь в начале, а потом в процессе работы уже не просишь новую ? Тогда увеличению показываемого таксменеджером значения есть предел.и чему он равен? и почему должно увеличиватся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:55 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshи чему он равен? и почему должно увеличиватся?логично предположить, что предел равен той величине, которую ты единожды изначально попросил у ОС. увеличивается, потому что ты тратишь запрошенную память. Вот как всю использовать начнешь, так и прекратится увеличение Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 14:57 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
то есть если я сразу запрашиваю через malloc 5 Мб я ее не получаю??? а получаю по мере ее обращения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:00 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshто есть если я сразу запрашиваю через malloc 5 Мб я ее не получаю??? а получаю по мере ее обращения?если я правильно понимаю :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:01 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshи чему он равен? и почему должно увеличиватся?У величивается, потому что память вначеле только резервируется и затем лишь, по мере необходимости, реально выделяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:05 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
авторесли я правильно понимаю :)если честно, то как-то мало верится в такое :( Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:07 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю, опять же, то винда, когда у нее просят память, выделяет ее в свопе, а когда ты обращаешьсяк выделенной памяти, то она нужные страницы отображает в физическую память, т.о. минимизируется использование физической памяти. Кстати, в винде есть понятие модели памяти, может с этим параметром поиграться ? Правда эти игрища в свое время привели к тому, что у меня на одной из машин перестал запускаться драйвер видеокарты :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:10 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Пользуйся VirtualAllococ'м. Тогда точно будешь знать. Что ты зарезеровировал, что выделил и что вернул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:10 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
_БалтикаПользуйся VirtualAllococ'м. Тогда точно будешь знать. Что ты зарезеровировал, что выделил и что вернул.VirtualAlloc'ом, плиз :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:11 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасЕсли я правильно понимаю, опять же, то винда, когда у нее просят память, выделяет ее в свопе, а когда ты обращаешьсяк выделенной памяти, то она нужные страницы отображает в физическую память, т.о. минимизируется использование физической памяти.но при этом ведь саммарная память занимаемая процессов не изменяетсяЮ так ведь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:11 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
но при этом ведь суммарная память занимаемая процессов не изменяется, так ведь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:12 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshно при этом ведь саммарная память занимаемая процессов не изменяетсяЮ так ведь?то,что таскменеджер показывает ? а Х его З, чего он там показывает Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:13 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
авторПользуйся VirtualAllococ'м. Тогда точно будешь знать. Что ты зарезеровировал, что выделил и что вернул.хотелось бы С-ми функциями с памятью работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:15 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshхотелось бы С-ми функциями с памятью работатьну дак и пользуйся. Насколько я понимаю (опять же ) в твоей проге есть компиляторовский менеджер памяти, он изначально просит у ОС гораздо больше памяти, чем надо. А тебе отдает уже из этого выпрошенного куска. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:17 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvsh авторПользуйся VirtualAllococ'м. Тогда точно будешь знать. Что ты зарезеровировал, что выделил и что вернул.хотелось бы С-ми функциями с памятью работатьВ сплюснутой библиотеке malloc предназначен, если я не ошибаюсь в основном для выделения малых кусков памяти (до 256К, если опять-же не ошибаюсь:)). У них и менеджер для этих малых кусков написан специально. А для больших лучше все-же апи юзать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:21 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
то есть паниковать не стоит? типа съест сколько сможет и успокоится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:25 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
_Балтикадо 256К, если опять-же не ошибаюсь:))Байт, конечно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:25 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshто есть паниковать не стоит? типа съест сколько сможет и успокоится?дак ты понаблюдай, в течение долгого времени, там и решишь, есть утечки или нет Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:30 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
_Балтика vitvsh авторПользуйся VirtualAllococ'м. Тогда точно будешь знать. Что ты зарезеровировал, что выделил и что вернул.хотелось бы С-ми функциями с памятью работатьВ сплюснутой библиотеке malloc предназначен, если я не ошибаюсь в основном для выделения малых кусков памяти (до 256К, если опять-же не ошибаюсь:)). У них и менеджер для этих малых кусков написан специально. А для больших лучше все-же апи юзать. Откуда сведения о менеджере "малых кусков памяти" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 15:36 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Откуда сведения о менеджере "малых кусков памяти"Бес попутал насчет малых кусков :). Но вобщем-то кучу (из коей маллок память выделяет) нужно юзать, ихмо, лишь для небольших кусков. А уж если потоков с использованием малока много то надоть кучу куч делать :) А нето малок воще заткнуться может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 16:24 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
_Балтика Gluk (Kazan) Откуда сведения о менеджере "малых кусков памяти"Бес попутал насчет малых кусков :). Но вобщем-то кучу (из коей маллок память выделяет) нужно юзать, ихмо, лишь для небольших кусков. А уж если потоков с использованием малока много то надоть кучу куч делать :) А нето малок воще заткнуться может. Просто как раз с этим (в частности) усиленно трахаемся :) Зачепило за живое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:19 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
подключил XWatcher , смотрю. commited память растет постепенно - сначала reserved увеличивается на 256 страниц, потом commited поглощает их, потом опять... сложно как-то понять чего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 14:29 |
|
||
|
thread & memory
|
|||
|---|---|---|---|
|
#18+
vitvshподключил XWatcher , смотрю. commited память растет постепенно - сначала reserved увеличивается на 256 страниц, потом commited поглощает их, потом опять... сложно как-то понять чего X-Watcher создавался для несколько других целей. Найти им источник утечки можно, наверно, только путем анализа данных, которые пишутся в выделяемую память. Т.е. кликаем по квадратику и глядим что за данные там находятся. По сути проблемы - надо смотреть код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 11:01 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2031831]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 359ms |

| 0 / 0 |
