因为free()函数的用处在于实时执行回收内存的操作,如果程序简单,当程序结束前不会使用过多内存,也就不会降低系统性能,那么也可以不用free()函数去释放内存。当程序结束后,操作系统会完成释放的功能。
但如果在开发大型程序时不写free()函数后果会很严重。因为可能在程序中要重复分配一万次10MB的内存,如果每次分配内存后都使用free()函数释放用完的内存空间。那么这个程序只需使用10MB内存就可以运行。但是如果不使用free()函数,那么就要使用100GB的内存!这其中包括绝大部分的虚拟内存,而由于虚拟内存的操作需要读写磁盘,会极大影响系统性能,甚至导致系统崩溃。
因此,在程序中编写malloc()函数分配内存时都对应地写出一个free()函数进行释放,是一个良好的编程习惯。这不但体现在处理大型程序时的必要性,也在一定程度上体现程序优美的风格和健壮性。
但是,有时常常会有将内存丟失的情况,例如:
p01d=(int*)malloc(sizeof(int));
pNew=(int*)malloc(sizeof(int));
这两段代码分别表示创建了一块内存,并将内存的地址传给了指针pOld和pNew,此时指针pOld 和pNew分別指向两块内存。如果进行pOld=pNew操作,pOld指针就指向了pNew指向的指针地址。这时再进行free(pOld);释放内存的操作,此时释放pOld所指向的内存空间是原来pNew指向的,于是这块空间被释放了。但是pOld原来指向的那块内存空间还没有被释放,不过因为没有指针指向这块内存,所以这块内存就丟失了。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>