我们都被教导必须释放每个已分配的指针。不过,我有点好奇不释放内存的真正代价。在一些明显的情况下,比如在循环内部或线程执行的一部分调用malloc()
时,释放是非常重要的,这样就不会有内存泄漏。但是考虑下面两个例子:
首先,如果我有这样的代码:
int main()
{
char *a = malloc(1024);
/* Do some arbitrary stuff with 'a' (no alloc functions) */
return 0;
}
真正的结果是什么?我的想法是进程死亡,然后堆空间也消失了,因此错过对free
的调用没有什么害处(然而,我确实认识到无论如何拥有它对于闭包、可维护性和良好实践的重要性)。我这样想对吗?
其次,假设我有一个类似shell的程序。用户可以声明像aaa = 123
这样的变量,这些变量将存储在一些动态数据结构中供以后使用。显然,您应该使用一些调用*alloc函数(hashmap、链表等)的解决方案。对于这类程序,在调用malloc
之后释放是没有意义的,因为这些变量必须在程序执行期间始终存在,并且没有好方法(我可以看到)来实现静态分配的空间。分配了一堆内存,但只在进程结束时释放,这是糟糕的设计吗?如果是的话,有什么替代方案?