C堆和系统内存

一般利用操作系统的功能来管理内存。堆的大小可能在程序创建后就固定不变了,也可能可以增长。不过堆管理器不一定会在调用free函数时将内存返还给操作系统。释放的内存只是可供应用程序后续使用。所以,如果程序先分配内存然后释放,从操作系统的角度看,释放的内存通常不会反映在应用程序的内存使用上。

程序结束前释放内存

操作系统负责维护应用程序的资源,包括内存。当应用程序终止时,操作系统要负责重新分配这块内存以便别的应用程序使用。已终止的应用程序的内存状态不管是否损坏都无关紧要,事实上,内存损坏可能正是应用程序终止的原因。异常终止的程序可能无法做清理工作,因此没有理由在程序终止之前释放分配的内存。

话虽如此,可能又有一些原因要求我们在程序终止前释放内存。尽责的程序员可能会把释放内存当成质量指标。即使应用程序正在终止,不再使用内存后将其释放总归是好习惯。如果用工具来检测内存泄漏或是类似问题,那么释放内存会让这类工具的输出是干净的。在有些相对简单的操作系统上,操作系统本身可能不会自动回收内存,而是需要程序在终止前回收内存。还有,新版的应用程序可能会在程序末尾增加代码,如果之前的内存没有释放就可能出问题。

因此,确保程序终止前释放所有内存:

  • 可能得不偿失;
  • 可能很耗时,释放复杂结构也比较麻烦;
  • 可能增加应用程序大小;
  • 导致更长的运行时间;
  • 增加引入更多编程错误的概率。

是否要在程序终止前释放内存取决于具体的应用程序。

赞(2)

评论 抢沙发

评论前必须登录!

 

C指针