技术问询:内存泄漏是否永久?程序用malloc未free终止后内存是否丢失?
问题1:内存泄漏是否具有永久性?
咱们先掰扯清楚内存泄漏的本质:它是程序在运行过程中,没能正确释放掉不再需要的内存空间,导致这部分内存被程序“攥在手里不放”——程序自己没法再复用这部分内存,但这种“占用”只局限于程序运行期间。
一旦程序终止(不管是正常退出还是崩溃),操作系统会立刻回收所有分配给这个程序的资源,包括那些被泄漏的内存。所以内存泄漏根本不是永久性的,它只会在程序运行时导致可用内存减少,严重的话可能让程序变慢甚至崩溃,但程序一关,所有被占的内存就都还给系统了。
问题2:当程序中使用malloc分配内存但未调用free释放时,程序运行并终止后,该部分内存是否会在运行程序的计算机上丢失?
完全不会!操作系统可是系统资源的“大管家”,所有进程的内存分配都在它的掌控之下。当你用malloc申请内存时,本质是操作系统从全局的空闲内存池中划出一块给你的程序使用;哪怕你全程忘了调用free去释放,只要你的程序一退出,操作系统就会把这部分内存重新标记为空闲状态,放回系统内存池里,其他程序或者你之后再运行这个程序,照样能用上这部分内存。
举个简单的例子:你写个C程序,用malloc申请了100MB内存,写完直接return 0不free。运行完关闭程序后,去看任务管理器(Windows)或者top(Linux),会发现系统的可用内存又回到了程序运行前的水平,那100MB根本没丢。
内容的提问来源于stack exchange,提问作者Striker
相关产品推荐
相关产品推荐

