Использование памяти не уменьшается при использовании бесплатно? - PullRequest
2 голосов
/ 12 октября 2009

Каким-то образом этот вызов free() не работает. Я запустил это приложение в Windows и следил за использованием памяти в диспетчере задач, но не увидел сокращения использования памяти после вызова free().

int main(int argc, char *argv[])
{
    int i=0;
    int *ptr;

    ptr = (int*) malloc(sizeof(int) * 1000);

    for (i=0; i < 1000; i++)
    {
        ptr[i] = 0;
    }

    free(ptr); // After this call, the program memory usage doesn't decrease

    system("PAUSE");

    return 0;
}

Ответы [ 3 ]

13 голосов
/ 12 октября 2009

Типичные реализации C не возвращают свободную память операционной системе. Он доступен для использования той же программой, но не для других.

2 голосов
/ 12 октября 2009

Нельзя предполагать, что сразу после выполнения free память будет возвращена обратно в ОС. Как правило, реализация CRT имеет некоторую оптимизацию, из-за которой они могут не возвращать эту память немедленно. Это позволяет CRT быстрее распределять последующие запросы на выделение памяти.

1 голос
/ 12 октября 2009

Обратите внимание, что диспетчер задач покажет память, "заимствованную" libc из системы. Но не все malloc передаются через libc в операционную систему, а также не все свободные освобождают системную память.

Обычно libc выделяет память большими блоками для нескольких вызовов malloc.

...