Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以避免在现代操作系统中释放C中分配的内存吗? 我使用Visual C++ 2010作为一个C项目。main()中有以下代码:_C_Memory Management - Fatal编程技术网

我可以避免在现代操作系统中释放C中分配的内存吗? 我使用Visual C++ 2010作为一个C项目。main()中有以下代码:

我可以避免在现代操作系统中释放C中分配的内存吗? 我使用Visual C++ 2010作为一个C项目。main()中有以下代码:,c,memory-management,C,Memory Management,我不确定我是否需要最后一行。在现代操作系统中,我可以省略程序末尾的arr2_release()吗?我正在使用Windows7 总是释放你的内存。操作系统将在进程终止时释放进程的资源,包括其内存。但这并没有给你垃圾收集(你必须使用不同的语言)。还要注意的是,它只在程序结束后才执行(也在注释中说明),因此只要程序正在运行,如果不执行,内存就不会被释放 有一天,您的代码可能会被用作更大程序的一部分,即使它现在只有几行。因此,始终确保释放您获得的所有资源。另外,作为一名C程序员,考虑资源管理应该是一种习

我不确定我是否需要最后一行。在现代操作系统中,我可以省略程序末尾的arr2_release()吗?我正在使用Windows7

总是释放你的内存。操作系统将在进程终止时释放进程的资源,包括其内存。但这并没有给你垃圾收集(你必须使用不同的语言)。还要注意的是,它只在程序结束后才执行(也在注释中说明),因此只要程序正在运行,如果不执行,内存就不会被释放


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

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

这是一种有效的优化方法,可以更快地关闭(有时甚至可以更快地执行,以换取内存消耗),但您必须对保留的资源非常挑剔:

  • 操作系统可以有效地处理内存和文件描述符(没有这样做的古代平台大多已被废弃。尽管如此,仍有一些小型系统无法释放内存和文件描述符)
  • 文件
    缓冲区由运行时有效清理
  • Windows GUI资源没有得到有效清理,这样需要更长的时间
无论如何,进行清理并培养正确的思维方式,这会使查找泄漏变得更加容易,并且更好地转移到更大、更长时间运行的任务中。

过早的优化是万恶之源。(测量后进行优化的专家专用选项和仔细考虑还不适用)

最好释放分配的内存。如果您运行了足够多的脚本,但没有释放它,它可能会占用内存,导致系统运行缓慢。特别是在使用C时,它的内存管理有很高的标准。到目前为止,我知道操作系统不能保证立即回收您想要泄漏的内存。。。。。所以你最好把它们放了。我不明白为什么会有人问这个问题。以正确的方式编写代码会带来一些成本吗?不必要地走捷径有什么好处吗?始终使用最佳实践编写代码;只有当你有令人惊讶的理由时才违反这些做法。请注意,有关自动释放的链接帖子说,在大多数现代操作系统中,程序终止后,内存会自动释放。当程序运行时,如果不显式释放已分配的任何内存,仍然可能出现内存泄漏。操作系统在这方面帮不了你。C不支持自动垃圾收集。好的,谢谢。是的,我还是被之前的讨论弄糊涂了。释放它而不是单纯的希望操作系统会拯救你是有意义的。过早的停止优化也是有害的。对于复杂的、多线程的应用程序和不透明的外部库来说,它使查找漏洞变得更容易,而且通常是不可能的。@MartinJames:我回答了全部问题,包括留下烂摊子和不留下烂摊子的原因。你的评论已经包括在内了。
ARRAY2D a;

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