对于FastMM4以往的认识,就是知道使用FastMM4之后会提示你是否有内存泄露,以及可以通过FullDebugMode来查找内存泄露的位置,从而可以消除内存的泄露。
使用FastMM4如果打开了‘FullDebugMode’则编译完成之后需要在exe或者dll旁边放置一个FastMM_FullDebugMode.dll,否则会出现运行不了的情况,在发布的服务程序时,这种情况更是比较常见,经常会出线使用不了的情况,自己还是一头雾水。
针对于FastMM4如何消除内存泄露的问题,前面介绍过,这部分内容,很多也有介绍,下面说一个我的最新认识。
由于FastMM4如此的好用,所以一般在我们的程序中都会使用,但是可能你不知道的是:谁最先使用的FastMM4会由他创建一个内存管理器,负责整个过程中的内存管理,但是一旦这个主程序被先释放了话,就会导致后面的过程中出现异常。
这么说可能都有些糊涂,举个例子:
写了一个Exe,使用了FastMM4,其中有一个方法,是加载一系列的dll(每个dll在编写的过程中也都是用了FastMM4)
procedure LoadDlls(AFilstList:TstringList)
var
I: Integer;
nHandle: LongWord;
begin
for I := 0 to AFilstList.count - 1 do
begin
nHandle := LoadLibrary(AFilstList[I]);
FDllList.add(nHandle);
end;
end
这时候,由于主程序使用了FastMM4所以,主程序控制着所有的dll的内存,所以释放时,顺序释放就好,但是如果主程序没有使用FastMM4,这时候控制内存管理的是加载的第一个dll,所如果顺序释放就会出现内存混乱,需要倒序释放。