Что на самом деле происходит, когда вы не освобождаетесь после Мэллока?
Это было то, что беспокоило меня уже целую вечность.
мы все учили в школе (по крайней мере, мне), что вы должны освободить каждый указатель, который выделяется. Мне немного любопытно, однако, о реальной стоимости не освобождения памяти. В некоторых очевидных случаях, например, когда malloc вызывается внутри цикла или части выполнения потока, очень важно освободить, чтобы не было утечек памяти. Но рассмотрим следующие два примера:
во-первых, если у меня есть код это что-то вроде этого:
int main()
{
char *a = malloc(1024);
/* Do some arbitrary stuff with 'a' (no alloc functions) */
return 0;
}
каков реальный результат здесь? Я думаю, что процесс умирает, а затем пространство кучи все равно исчезает, поэтому нет никакого вреда в пропущенном вызове free (однако я признаю важность его в любом случае для закрытия, ремонтопригодности и хорошей практики). Я прав в этом мышлении?
во-вторых, допустим, у меня есть программа, которая действует немного напоминает оболочку. Пользователи могут объявлять переменные типа aaa = 123 и они хранятся в некоторой динамической структуре данных для последующего использования. Ясно, что кажется очевидным, что вы будете использовать какое-то решение, которое вызовет некоторую функцию *alloc (hashmap, linked list, что-то в этом роде). Для такого рода программы, это не имеет смысла, когда-либо бесплатно после вызова malloc потому что эти переменные должны присутствовать во все времена во время выполнения программы, и нет хорошего способа (который я вижу) реализовать это со статически выделенным пространством. Это плохой дизайн, чтобы иметь кучу памяти выделено, но только освобождено как часть завершения процесса? Если да, то какова альтернатива?
Comments