Утечка памяти - это когда ваш код выделяет память, а затем теряет ее, в том числе возможность освободить ее позже.
Например, в C это можно сделать с помощью простой последовательности:
void *pointer = malloc (2718); // Alloc, store address in pointer.
pointer = malloc (31415); // And again.
free (pointer); // Only frees the second block.
Оригинальный блок памяти все еще выделен, но, поскольку pointer
больше не указывает на него, у вас нет возможности его освободить.
Эта последовательность сама по себе не является 'Это плохо (ну, это это плохо, но эффект может и не быть).Обычно, когда вы делаете это неоднократно, возникают проблемы.Например, в цикле или в функции, которая неоднократно вызывается:
static char firstDigit (int val) {
char *buff = malloc (100); // Allocates.
if (val < 0)
val = -val;
sprintf (buff, "%d", val);
return buff[0]; // But never frees.
}
Каждый раз, когда вы вызываете эту функцию, вы теряете сто байт (плюс вся служебная информация).
ИДа, утечки памяти будут влиять на другие вещи.Но эффекты должны быть ограничены.
Это в конечном итоге повлияет на протекающий процесс, поскольку у него заканчивается адресное пространство для выделения большего количества объектов.Хотя это может не обязательно иметь значение для краткосрочных процессов, долгоживущие процессы в конечном итоге завершатся сбоем.
Однако приличная операционная система (включая Windows) ограничит ресурсы, которыеможно использовать один процесс, что минимизирует влияние на других процессов.Поскольку современные среды отключают виртуальную от физической памяти, единственный реальный эффект, который может быть перенесен из процесса в процесс, - это если все время пытаться сохранить всю его виртуальную память в физической памяти, уменьшая выделение этой физической памяти другим процессам.
Но даже если один процесс теряет гигабайты памяти, сама память не будет использоваться процессом (суть утечки в том, что процесс потерял доступ к памяти).И, поскольку он не используется, ОС почти наверняка выгрузит его на диск и никогда больше не вернет его в ОЗУ.
Конечно, он использует пространство подкачки и , что может влиять на другие процессы, но объем диска намного превышает объем физической памяти.