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