我正在编写一个C app,我使用malloc在堆上创建数据。现在,当应用程序处于活动状态时,此数据始终是持久的,因此我从不“释放”Malloc数据。
我的问题是:当应用程序终止时,是否会自动释放此内存,或者必须在完成应用程序时手动执行free()?
答案 0 :(得分:5)
这是实现定义的。严格遵循C标准,您应该在应用程序终止之前free
malloc
所有内容。
然而,任何现代通用操作系统都会在您之后进行清理,因此这仅适用于某些嵌入式,老式或其他异域环境。
作为一种风格,请尝试free
每个已分配的块。它让你习惯于编写干净的代码并防止内存泄漏。
答案 1 :(得分:2)
它将被释放。这是“过程”抽象的奇迹。此运行进程拥有的所有资源和内存在终止时释放。
请注意,花了一些时间才能提出这个抽象,但它对于一个系统来说是一个非常好的沙箱。事实上,杀戮过程甚至被用来作为最后的手段来尝试修复在执行数天时出现泄漏或性能下降的错误程序(它使用漂亮的名称"Process Rejuvenation"调用,甚至存在于会议中期刊,但实际上是一个糟糕的设计或编码的准入)。
答案 2 :(得分:-2)
你永远不应该明确free
这样的记忆。最好的情况是它不会给你任何好处,最坏的情况是它会将大量换出的数据交换回内存,只是为了检查一些簿记指针然后丢弃它,无意地打乱用户的硬盘驱动器。