说起来这个问题其实困扰了我很久,直到现在我也没有弄明白为什么会这样,为什么我瞎试出来的这个方法有效。如果真等哪天我能够说的清楚,我想那个时候我对Windows下的PC程序编译以及运行机理了解的比较透彻了。

简单的现象描述:在使用MATLAB的时候,我时常会在仿真或者代码生成的时候遇到mexw32类型的文件无法删除的情况。经过多次摸索,我唯一能够确定的就是这个文件依然被MATLAB占用,因为我把MATLAB关闭后文件删除是没有问题的。

mexw32文件删除异常处理_文件删除


不过到底是如何被占用的呢?目前我自己掌握的知识点中关于这方面的描述还是比较浅显而且有限,唯一知道的就是mex(mexw32)文件其实跟Windows下的dll文件是一回事儿,只是后缀名上又一点差异。也就是说,这个文件是一个Windows下的动态链接库。在程序运行的时候需要被调用,这也就基本可以解析为什么仿真的时候需要用的这个文件了。

不过,即使是在程序仿真或者代码生成的过程中被使用了,在这些过程结束后也应该把资源释放掉。可现实情况中,我遇到的情况通常是即使是模型关掉了这个文件依然在被使用的过程中。这的确是有一点不好理解,具体的原因还是需要深究一下,那是后话了。

通常,有些强迫症的我实现这类文件删除的方法是关闭或者重启MATLAB,直到偶然一次试用了clear all的命令。执行了这个命令后,文件占用的问题就不会有了,此时进行文件删除是没有问题的。clear all能够清除一部分内存的驻留,看来mexw32文件加速仿真速度的是有一定代价的,那就是增加了内存的驻留。当然,这还是我的一点理解与猜测,具体的机理我还是没有花时间去查找相应的文档给自己的猜测寻找什么理论上的支持。