Почему free () для массива пуаров не освобождает память? - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь освободить память после массива указателей, как показано в следующем коде:

int ** t = (int**) malloc(sizeof(int*)*10000000);
printf("1\n");
getchar();
for(int i =0; i < 10000000; i++){
    t[i] = (int*) malloc(sizeof(int));
    *t[i] = i;
}
printf("2\n");
getchar();

for(int i =0; i < 10000000; i++){
    free(t[i]);
}
printf("3\n");
getchar();

free(t);
printf("4\n");
getchar();

Во время выполнения мой системный монитор показывает мне некоторые странные значения.Когда отображаются конкретные цифры (как в коде), я получаю следующее использование памяти.

  1. 148K
  2. 390,540K
  3. 390,540K
  4. 312,676К

Я немного растерялся.Почему числа в 2 и 3 одинаковы?Я что-то не так делаю, или системный монитор неточный?Если это вина СМ, ​​то почему он заметил разницу между 3 и 4?

1 Ответ

0 голосов
/ 25 апреля 2018

Поведение free() зависит от его базовой реализации. Большинство реализаций free() не возвращает освобожденную память обратно в ОС, а просто возвращает память обратно в пул, из которого удовлетворяются запросы malloc, что просто означает, что освобожденная память теперь доступна для повторного использования программа. Отметьте это .

...