Borland Delphi 7 FastMM RTL 补丁(0分)

  • 主题发起人 主题发起人 LSUPER
  • 开始时间 开始时间
对全局变量内存泄漏检测的不准确性:全局变量的释放应该是在程序退出之后,而内存管理器报告内存泄漏时程序还没有退出,所以存在偏差(个人意见)。

//报告string str 引起了内存泄漏。
program Project1;
uses
System,
Forms,
SysUtils,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var
str : string;
iCount : Integer;

begin
ReportMemoryLeaksOnShutdown := true;
Application.Initialize;
str := '123';
Application.Run;
end.
 
加了1.2的补丁以后的程序不能同时使用EurekaLog
我用的是EurekaLog 5.13 Ent的
下面的是在Delphi7中运行上报的错
Version : 5.1.3
Date : Thu, 11 May 2006 17:50:21 +0800
OS : Microsoft Windows 2003
RAD : Delphi 7.0
Dump : $8B $50 $14 $8B $7D $F8 $8B $5D $08 $42 $89 $50 $14 $8B $C7 $83 $E0 $01 $C7 $45 $F0 $00 $00 $00 $00 $89 $45 $E8 $8B $FF $F6 $05
Section : ExceptionLog.Done (Address: 0045E580)
LastExcept:
Address : $7C9696D0
Exception : EAccessViolation
Message : Access violation at address 7C9696D0 in module 'ntdll.dll'. Read of address 00000014
Call Stack:
 
经检查,发现是EurekaLog 5.13中ExceptionLog第2168行中的如下代码
function ModuleInitTable: PackageInfo;
begin
{$IFDEF Delphi6Down}
Result := PPointer(DWord(@AllocMemSize) + $84)^;
{$ELSE}
{$IFDEF Delphi9Down}
Result := PInitContext(DWord(@AllocMemSize) + $80).InitTable;
{$ELSE}
Result := PInitContext(DWord(@AllocMemSize) + $2218).InitTable
{$ENDIF}
{$ENDIF}
end;

此函数根据AllocMemSize取出InitTable,而1.2补丁中并没有对AllocMemSize进行处理,原版是有的,故发生此错误,怎么改正啊
 
不及明白,贴子也长了,
是不是不要安装fastMM(包括那个替换用的dll),而只要运行replace就可。
那就应该这样说:
d10内存管理移至d7的方法 (本质上是fastMM),而不是fastMM补丁。
对不对,谢谢。
 
多谢楼主的热心,我也用了一下1.2 版的,不过还是不清楚dpr文件里面是否需要引用FastMM4.pas,能不能将这些也写到说明文档里,或者干脆在压缩包中带两个Demo
 
LZ不是说直接在DPR引用一下就可以了,为什么还要编绎SYSTEM.PAS?不懂
 
1.这个1.2的补丁包 直接用 就不要安装Fastmm 4.74了 这样可以提高性能

2.要么你就不要用这个补丁包,直接用Fastmm 4.74

3.Fastmm是什么?内存管理 取代d7原来自带的 有很多好处

4.那1.2补丁又是什么?从BDs2006移植到d7的!
 
后退
顶部