网站怎么搭建,wordpress 微博客,公司黄页查询,个人博客模板网站在实际的C开发中#xff0c;我们经常会遇到诸如程序运行中突然崩溃#xff0c;程序运行所用内存越来越多最终不得不重启等问题#xff0c;这些问题往往都是内存资源管理不当造成的(内存泄漏) 比如#xff1a; 有些内存资源已经被释放#xff0c;但指向它的指针并没有改变指… 在实际的C开发中我们经常会遇到诸如程序运行中突然崩溃程序运行所用内存越来越多最终不得不重启等问题这些问题往往都是内存资源管理不当造成的(内存泄漏) 比如 有些内存资源已经被释放但指向它的指针并没有改变指向(成为了野指针)并且后续还在使用 int *p new int[100]; delete [] p; // p指向的空间已经被释放 // p指向了已经释放的空间 *p 1024; // 操作不属于自己的内存 有些内存资源已经被释放后期又试图再释放一次(重复释放同一块内存会导致程序运行奔溃) ----- double free 没有及时释放不再使用的内存资源造成内存泄漏程序占用的内存资源越来越多 void get_memory(char *p) { p new char[100]; } 针对以上这些情况很多程序员认为C语言应该提供更友好的内存管理机制这样就可以将精力集中于开发项目的各个功能上 事实上内存管理的替代方案很早就有了早在1959年前后就有人提出了“垃圾自动回收”机制。所谓垃圾指的是那些不再使用或者没有任何指针指向的内存空间而“回收”则指的是将这些“垃圾”收集起来以便再次利用 如今垃圾回收机制已经大行其道得到了诸多编程语言的支持例如JavaPythonC#PHP等 而C虽然从来没有公开的支持过垃圾回收机制但C98/03标准中支持使用auto_ptr智能指针来实现堆内存的自动回收 C11新标准在废弃auto_ptr的同时增添了unique_ptrshared_ptr以及weak_ptr这3个智能指针来实现堆内存的自动回收 所谓智能指针可以从字面上理解为“智能”的指针具体来讲智能指针和普通指针的用法是相似的(-/*)不同之处在于智能指针可以在适当时机自动释放分配的内存也就是说使用智能指针可以很好地避免“忘记释放内存而导致内存泄漏”问题出现由此可见C也逐渐开始支持垃圾回收机制了尽管目前支持程度还有限