我可以避免使用现代操作系统在C中释放已分配的内存吗?

时间:2014-04-24 16:12:23

标签: c memory-management

我正在使用Visual C ++ 2010进行C项目。我在main()中有以下代码:

ARRAY2D a;

arr2_init(&a, 5, 5);  /* 5x5 dynamic, multi-demensional array (of type int) */
arr2_release(&a); 

我不确定我是否需要最后一行。在现代操作系统的程序结束时,我可以省略arr2_release()吗?我使用的是Windows 7.

2 个答案:

答案 0 :(得分:1)

是的,您可以避免手动释放任何资源,运行时或操作系统将在您之后清除 请不要这样做。

这是一种有效的优化,可以更快地关闭(有时甚至可以更快地执行以换取内存消耗),尽管你必须挑剔你留下的资源:

  • 操作系统可以有效地处理内存和文件描述符(没有这样做的古老平台大部分都会被废弃。但是,有一些小系统无法解决这个问题。)
  • FILE缓冲区由运行时有效清理。
  • Windows GUI资源以这种方式有效清理,需要更长时间。

无论如何,进行清理并开发正确的思维模式,使搜索泄漏变得更加容易,并且可以更好地转移到更大,更长时间运行的任务。 过早优化是万恶之源。 (仅在测量和仔细考虑后优化的专家选项尚不适用)

答案 1 :(得分:0)

永远释放你的记忆。操作系统将发布一个过程'资源终止时,包括其内存。但这并没有给你垃圾收集(你必须使用不同的语言)。另请注意,只有 您的程序结束后(也在评论中说明),所以只要您的程序正在运行,如果您不这样做,内存将不会被释放它

有一天你的代码可能会被用作更大程序的一部分,即使它现在只有几行。因此,请始终确保释放您获得的所有资源。此外,作为C程序员,无论如何,考虑资源管理应该是一种习惯。