当我们malloc()时,我们真的需要free()吗?是什么让它与自动变量不同呢?

Hoo*_*lum 1 c malloc free memory-management automatic-storage

操作系统只会恢复它(在程序退出后)对吗?那么除了良好的编程风格之外还有什么用?还是有什么我误解的?是什么使它与"自动"分配不同,因为两者都可以在运行时更改,并且都在程序执行后结束?

Kev*_*vin 13

当您的应用程序处理大量数据时,您必须释放以节省堆空间.如果不这样做,可能会发生几件坏事:

  • 操作系统将停止为您分配内存(崩溃)
  • 操作系统将开始将您的数据交换到磁盘(颠簸)
  • 其他应用程序将有更少的空间来放置他们的数据

操作系统收集应用程序退出时分配的所有空间这一事实并不意味着您应该依赖它来编写可靠的应用程序.这就像试图依靠编译器来优化糟糕的编程.内存管理对于良好的性能,可伸缩性和可靠性至关重要.

正如其他人所提到的,malloc在堆中分配空间,而在堆栈上创建自动变量.两者都有用途,但确实非常不同.堆空间必须由OS分配和管理,并且可以动态地存储不同大小的数据.