|
|
|
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 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33563256&tid=2031831]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 577ms |

| 0 / 0 |
