C#内存泄露问题分析

这篇文章主要介绍“C#内存泄露问题分析”,在日常操作中,相信很多人在C#内存泄露问题分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#内存泄露问题分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司-专业网站定制、快速模板网站建设、高性价比潮安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式潮安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖潮安地区。费用合理售后完善,10余年实体公司更值得信赖。

今天在看国外的一篇技术文章的时候,发现有人就在研究这个问题!他给出了一种解决办法。首先把他介绍,操作系统会为每一个系统中运行的线程分配一个数据结构叫做TIB(Thread Information Block)或者叫TEB(Thread Enviroment BLock)。里面记录了与某个线程相关的所有信息。当然包括线程相关的堆栈地址信息。而堆栈的栈顶与栈基址分别存放在FS寄存器的4与8位置处。所以他通过嵌入式汇编实现了判断指针是栈指针,还是堆指针的方法。代码如下:

bool IsMemoryOnStack( LPVOID pVoid )  {      LPVOID dwStackTop = 0;      LPVOID dwStackLowCurrent = 0;      __asm      {             mov EAX, FS:[4]             mov dwStackTop, eax              mov EAX, FS:[8]              mov dwStackLowCurrent, eax      }      if( pVoid < = dwStackTop && pVoid >= dwStackLowCurrent )      {           // The memory lie between the stack top and stack commited.          return true;      }       // Pointer dosen't point to the stack      return false;  }

现在只需要把CTest可能引起内存泄漏的函数修改为如下,就可以解决问题了:

CTest(CTest* & t)    {    this->x=t->getX();     if(!IsMemoryOnStack(t))     {        delete t;        t=0;     }   }

这里使用指针引用的好处是在防止在释放了指针的内存后,用户继续访问指针的内存。

到此,关于“C#内存泄露问题分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


分享名称:C#内存泄露问题分析
文章链接:http://bzwzjz.com/article/jedeoj.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都响应式网站建设 企业网站设计 泸州网站建设 成都网站设计 外贸网站建设 成都定制网站建设 手机网站设计 成都网站制作 高端网站建设 网站建设改版 企业网站设计 手机网站建设 营销型网站建设 营销网站建设 重庆网站建设 重庆外贸网站建设 高端网站设计推广 成都网站建设 定制网站制作 企业手机网站建设 营销网站建设 成都网站建设公司