|
|
|
| В одной утилите заметил счетчик куч и для каждого процесса их чуть не по 10-20 штук... всегда казалось, что куча одна или здесь считают что-то другое? | |
|
|
|
|
|
|
|
для: asker++
(04.02.2012 в 16:59)
| | Тут нужно вернуться к тому, что есть куча процесса... не секрет, что выделяя память при помощи malloc() или new, а потом удаляя её при помощи free и delete вы тратите ресурсы. В хорошо организованных программах вы сразу выделяете много памяти, а потом отщипываете от уже выделенной памяти по кусочку, не тратя ресурсы на эту работу. По мере надобности можно увеличивать количество памяти большими кусками. Кроме того, если вы забыли вернуть память - ничего страшного, когда придет время, вы освободите весь кусок разом и в систему вернется вся память. Вот этот большой кусок памяти, зарезервированный с самого начала и увеличивающийся по мере надобности и называется кучей. В Windows куча реализована на уровне ядра и каждому процессу назначается по умолчанию одна куча - именно из неё выделяется память, когда вы пользуетесь malloc() или new. Как бы ужасно процесс не грохнулся, каких бы ошибок с памятью вы не начудили, после окончания работы программы куча освобождается и вся память возвращается системе.
По умолчанию куча одна и все хранится в вперемешку, однако, вы имеете возможность создать свою собственную независимую кучу, например, чтобы все данные для расчетов хранились поближе, более того, программа может подключать динамически библиотеки со своими кучами... и вы сами можете по системные нужды иметь стандартную кучу, под вычисления завести вторую кучу, а под графический интерфейс - третью... поэтому 10-20 куч памяти - это вполне реальное число. | |
|
|
|
|
|
|
|
для: cheops
(04.02.2012 в 18:01)
| | Век живи, век учись :) | |
|
|
|