>а как Вы вообще проверяете особожденна память или нет ? > >вкратце, популярно о работе malloc/free в libc : >- есть такая хрень "куча" - специальным образом размеченная память, принадлежащая процессу > >- malloc "выделяет память" то есть даст кусок памяти из кучи для >ваших нужд. Если в куче нет достаточного куска памяти, то она >обратится за ним к системе. >- free "освобождает память" то есть помещает кусок памяти обратно в кучу. >Заметте, что отнють не отдаёт обратно системе, а хранит для следующего >использования. >- правила по которым память будет возвращаться системе достатчно путанны, но еффективны. > Я уж, точно незнаю какие операции с памятью там происходят, но проблеммы как оказалось нет! На самом деле память освобождается!!! Только топ это не отображает: Простой пример: int main() { int *in; int i; for(i = 0; i < 10; i++) { in = calloc(30000000, sizeof(int)); sleep(5); //printf("i: %i\n", i); free(in); printf("i: %i\n", i); sleep(5); } } 5с- занята, 5с-свободна, Если снять комментарий то опять же,5с- занята, 5с-свободна вот только топ-у абсолютно по барабану: он как показывал 116м занятой так и показывает! Иначе бы машину бы просто скрючило, как если памяти выделить 10 раз по 116м, не освобождая! Всем спасибо за дискуссию!!!
|