delphi的fastmm

FastMM与Delphi10.4.2内存管理 FastMM与Delphi10.4.2内存管理 一、Delphi10.4.2内置FastMM4 FastMM属付费Licence。 1、内置到系统运行时System.pas 1.1、常用的全局debug变量 { Memory manager support } procedure GetMemoryManager(var MemMgr: TMemoryManager); overload; deprecated; procedure SetMemoryManager(con... 阅读详情
论:
 
1、绝对不可低估开源的力量!我们能由开源学到更多 ...
 
2、Dexter 抛弃了 BorlandMM,娶了 FastMM,因为 FastMM 勤快(效率更高),会持家(没有而外 DLL 的累赘)...
 
3、和以往的 Delphi 不同,Delphi 2006 中在 Dll 导出 string、动态数组等不再需要 ShareMem!(因为已经内置了)
 
=^0^=
 
-----------------------------------------------------------------------------------------------------------------------------------------
 
这差不多是一年半前发的一封邮件了,当时强烈推荐使用 FastShareMem 替代 Borland 的 ShareMem 以避免不必要的麻烦(BUG 等)。
 
之后,Borland 发布了 Delphi 2005,当然,这个相对 Delphi 8 依旧是问题多多。到了 sp3 时 Delphi 2005 依旧存在若干问题。其中一个突出的问题是:IDE 启动速度过慢,爆占内存!不过这个在去年的九月份左右,Borland 的开发人员(Allen Bauer,IDE 的开发者)发布了一个非官方的补丁,据说主要是采用 FastMM 重新编译了 BorlndMM 宝兰这个使用了 NN 年的内存管理器,从而达到加速 IDE 启动,降低内存使用和内存碎片等。当时下载使用,确实非常不错!
 
当时开始注意这个 FastMM 了。据说 FastMM 是一个法国人主导的一个开源项目。这个在外国 Delphi 社区非常有名(感觉在国内消息闭塞,去年才开始有人用?)主要目的就是重新实现一个高效、安全、稳定的内存管理器(Borland 的内存管理器问题多多,如 Dll 和 Exe 间无法共享,多线程下效率底下--一些情况下甚至于低一个数量级!)
 
后来,在代号为 Dexter 的 Delphi 2006 没 release 之前已经听李维大肆鼓吹说 Dexter 如何出色,还在 优快云 上说他 Demo 证明 FastMM 在 Delphi 和 BCB 下能提高 NNN% 的效率!
 
再后来,Delphi 2006 发布了,确实非常的稳定,带着对 Dexter 和 FastMM 的好奇,对比 Delphi 7 和 2006 的 RTL Source,可以发现 Delphi 的 Source/rtl/sys 中最核心的文件变化最大的是 getmem.ini 和 sysutils.pas
 
查看主要的差异,sysutils 中一大批基本函数的实现被修改了,按照 pas 中的说明修改内容来源于 FastCode 这个开源项目,而 getmem.inc 这个文件的差异简直就是被“重写”了。按照 getmem 中的说明,使用的就是 FastMM 这个内存管理器!
 
在 http://sourceforge.net/projects/fastmm 中可以下载到最新 stable 的 FastMM,当前推荐的是 4.62,主要特点包括:
 
1、彻底实现了 Borland 的内存管理器,可以完全取代现有的内存管理器(“取代”就是第一个 uses FastMM4,that is all ...)
 
2、实现了内存管理器共享机制,Exe 和 Dll 间共享内存管理器不需要任何 Dll 支持
 
3、集成了内存泄漏检测功能
 
4、充分兼容现有的代码、Delphi 旧内存管理器模式
 
5、为了加速 Delphi IDE(如 Delphi 7、Delphi 2005)的启动速度、管理内存占用等,他提供了 BorlndMM.dll 的替代,直接替换 Bin 中的 Dll 即可!
 
对于 3 非常吸引人,Demo 一个:
 
当然,他只会告诉你“发生问题了”,至于“问题如何发生的”还靠 AQTime 等。至少他会“第一时间”告诉你:出问题啦 ...
 
在 release 版中不会出现这个提示,如果觉得繁,可以让他 log 到文件或 disable 之。
 
几个引申:
 
1、由于 Dephi 2006 使用的 getmem.inc 就是 FastMM 的,所以,Delphi 2006 中在 Dll 导出 string、动态数组等不再需要 ShareMem!
 
2、经过测试,Delphi 7 下 uses FastMM4 会带来约 13K 的大小差异(除非直接集成 ;>),不过同样的 Dll 在 Delphi 2006 下编译竟然比 Delphi 7 下的要小 10K!看到 FastCode 和 FastMM 的威力了吧!
 
3、既然 getmem.inc 那么好使,一个大胆的设想,能否使用 Delphi 2006 的 getmem.inc 替换调 Delphi 7 的?我没空验证。不过由于接口函数的一致,这个应该是可行的,需要重新编译 System.pas,编译这个 pas 的方法在《delphi 内核源码分析》中有介绍的。
 
4、打算加到 GrandResource 中。
 
那么,他稳定么?
 
1、开源,公测保证
 
2、google 一下吧,网上 NNN 多项目转用 FastMM 的了 ...
 
BTW:
 
据说《delphi 内核源码分析》会出新版,会加入 FastMM 和 FastCode 等,同时详细解说 Delphi 中的 COM 部分。
 
嗯,如果消息可靠,确实是值得期待的一本书 ...
 
=^0^=

--------------------------------------------------------------------------------

主题: 宝兰妹妹 (borlandmm、sharemem) 不再是你的唯一 ...


在 exe 和 dll 编程中最容易出现的一个问题是:
 
这个问题是如何出现的呢?
 
dll 导出函数:
 
function GetText: string;
begin
  Result := '=^0^=';
end;
 
exports
  GetText;
 
exe 中使用:
 
function GetText: string; external 'TestDll.dll' name 'GetText';
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetText);
end;
 
执行 ShowMessage 后将报这个错误 ...
 
当然,出现这个问题后公司的大虾们会提示说,borland 在每个 dll 向导产生的代码中都会有如下提示:
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
问题是由于 dll、exe 间传递动态数组、string 而引起的。
 
昨天无意中看到一个网站:
 
http://www.codexterity.com
 
有对 borland 中关于内存管理的描述,其中对这类问题有非常清晰的解答。直接点,就是由于使用了两套内存管理系统,在堆中同时维护一个 string 而造成的冲突。当然,他也提出了解决方法:让 dll 与 exe 公用一个内存管理器,而且实现的非常的秒!由此带来的好处是:
 
1、避免使用 ShareMM(发布时需要额外附带 borlandmm.dll)
2、据说相对 ShareMM 速度提高 N 倍
 
使用方法是第一个引用该单元即可:
 
uses
  FastShareMem in 'FastShareMem.pas',
  SysUtils,
  Classes;
 
令人震惊的是,他的代码竟然不到 70 行!
 
同时,这个网站上还有一篇非常好的文章:borland 中是如何管理字符串的。附件 chm 是该网站的上面几篇文章的打包,rar 是测试例子。
 
最后的最后,不禁要问,为什么 borland 的工程师没有想到?或者有别的原因?
FastMM在Delphi中的内存管理与泄漏检测:最佳实践 FastMM是为Delphi语言编写的高性能内存管理器,旨在替代标准的内存管理器。与传统的内存管理器相比,FastMM通过一系列优化手段,显著提高了内存分配和释放的效率。与旧内存管理器相比,FastMM提供了一系列改进,包括但不限于:增强的性能:FastMM专为速度和效率设计,能够减少内存分配和释放的时间。详尽的内存泄漏检测:它能够在开发和测试阶段帮助开发者快速识别内存泄漏,以及提供详细的内存使用报告。线程安全:FastMM支持线程安全的内存管理,适合多线程应用。 阅读详情

相关推荐

FastMM最新版本Delphi下最好的内存泄漏检测控件加速控件

FastMM最新版本Delphi下最好的内存泄漏检测控件加速控件

Delphi xe集成了fastMM

Delphi xe集成了fastMM,这回大家调试程序是的时候可以方便地检查内存泄露了。 使用方法如下: 在project中,添加一行 ReportMemoryLeaksOnShutdown := True;

698

delphi检查内存是否释放工具---fastMM

1、彻底实现了 Borland 的内存管理器,可以完全取代现有的内存管理器(“取代”就是第一个 uses FastMM4,that is all ...) 2、实现了内存管理器共享机制,Exe 和 Dll 间共享内存管理器不需要任何 Dll 支持 3、集成了内存泄漏检测功能 4、充分兼容现有的代码、Delphi 旧内存管理器模式

Delphi7 内存管理及 FastMM 研究

Delphi7 内存管理及 FastMM 研究作者:刘国辉一、           引言      FastMM 是适用于delphi的第三方内存管理器,在国外已经是大名鼎鼎,在国内也有许多人在使用或者希望使用,就连 Borland 也在delphi2007抛弃了自己原有的饱受指责的内存管理器,改用FastMM.       但是,内存管理的复杂性以及缺乏 FastMM 中文文档导

老牛(niniu)的专栏 3933

delphi内存分配完全总结

delphi内存 内存分配 delphi内存的完全总结

封装CTP API为Java SDK

本文介绍了在Windows环境下使用Java调用CTP API的编译实现过程。首先需要准备CTP API SDK、JDK、SWIG和Visual Studio等工具,配置好开发环境。然后通过搭建目录结构、编写SWIG接口文件ctp.i,实现C++到Java的代码转换。文中详细说明了文件目录组织方式,并提供了处理中文乱码的代码示例。通过这一系列步骤,最终将CTP的C++接口转换为Java可调用的形式,为Java项目获取期货实时报价数据提供支持。

weixin_43952815的博客 1222

delphi的FastMM怎么检查内存?请给我代码例子

FastMM是一个用于Delphi程序的内存管理库,它提供了对内存进行分配、释放、调整大小和检查的功能。 在使用FastMM时,你可以使用以下代码来检查内存: ``` uses FastMM4; // 检查未被释放的内存块数量 var UnreleasedBlocks: NativeUInt; begin UnreleasedBlocks := FastMM4.GetUnreleasedB...

weixin_42583683的博客 392

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1462

Delphi7 中使用FastMM

Delphi7 中使用FastMM 在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告。 在Delphi2007以后版本中,使用更加简单,只需要在工程开始的位置加上语句: ReportMemoryLeaksOnShutdown := True;就可以了,并且在运行时不会出现提示。如果想要生成文件报告,还需要FastM

cai5的专栏 8755

RealSense D455的标定并运行VINS-FUSION

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

qq_40186909的博客 2万+

#1机器学习(西瓜书)自学记录

《机器学习 》 Datawhale 组队学习, 吃瓜自学笔记。

qq_74168740的博客 1149

Delphi FastMM4使用(一)

内存泄漏经常出现在本地代码中,特别是多线程和发生异常的情况下,这时候在delphi环境下,FastMM4就特别有用。 调试过程如下: 1.打开FastMM4的调试功能,首先在自己的project里把FastMM4放在最前面,例如:     FastMM4,     Main   in   ‘Main.pas’   {MainForm}, 可以在project中定义编

1109

关于SVPWM七段式五段式调制后的相电压和线电压波形——大疆DJI技术笔试

1.SVPWM七段式/五段式调制的相电压和线电压波形 脉宽调制(PWM)在并网变流技术中得到了广泛的应用。与正弦脉宽调制(SPWM)的控制方法相比,SVPWM方法具有直流侧电压利用率高,电压谐波小,易于数字化实现等显著的优点,从而使SVPWM在实际的应用中越来越普遍。TMS320F28335是32位浮点的DSP控制器,具有150MHz的高速处理能力,18路PWM输出,与前几代数字信号控制器相比,性能平均提高了50%。其中具体的SVPWM理论实现的原理,请参考我的博客永磁同步电机的矢量控制策略(七)一一一SV

昔时扬尘处 2万+

Delphi2010中的fastMM

Delphi2010集成了fastMM,这回大家调试程序是的时候可以方便地检查内存泄露了。 使用方法如下: 在project中,添加一行 ReportMemoryLeaksOnShutdown := DebugHook<>0;DebugHook<>0 目的是保证单独运行exe文件不会弹出内存泄露框,源码可以不用注释掉此行 program Project1;

编程资料收集与共享交流 1029

别再用UE5默认材质:用Substance Painter一招提升写实感

今天,我就把这套从模型准备到引擎最终呈现的全流程技巧毫无保留地分享出来,这套方法不仅能让你的作品细节炸裂,更能让你理解次世代PBR(Physically Based Rendering)材质的底层逻辑。

海外旅居设计师,15年设计经验。 1325

把 ABAP ALV 做成可点、可改、可保存:Interactive Editable ALV Grid 的一套落地打法

文章摘要(148字): SAP ALV报表开发中,交互式可编辑网格的实用方案需解决三个核心问题:数据展示、交互下钻与编辑保存。本文以SCARR航空公司和SFLIGHT航班数据为例,演示如何实现双击主列表下钻明细、动态切换编辑模式、精确保存修改的技术路线。关键点包括:通过PF-STATUS添加业务按钮、使用CHECK_CHANGED_DATA同步前端修改、保护关键字段避免误操作,以及变更数据的审计跟踪方法。该方案适用于SAP GUI环境下的快速业务调整需求,相比Fiori开发具有更高的实施效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 230

Delphi7 的FastMM配置步骤

1>  FastMM是开源项目, 从 http://sourceforge.net/projects/fastmm 下载最新版 2>  文件夹Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下的相应文件就可以完成对IDE的提速 3> Enviroment->Lib

巫师 859

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3150

delphi fastmm4 调试

FastMM定位内存泄露的代码位置 开源的FastMM,使用很简单,在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告。 在Delphi2007以后版本中,使用更加简单,只需要在工程开始的位置加上语句: ReportMemoryLeaksOnShutdown := True;就可以了,并且在运行时不会出...

aldsot0997的博客 292

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

delphi fastMM 使用方法简介

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34378045的博客 991

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

我想在delphi7中如何使用fastmm4

在 delphi 7 下使用  fastmm4 ,大致如下步骤: 一、准备工作 1、将文件 BorlndMM.dll,替换掉 Delphi/Bin 目录下的相应文件; 2、设置路径:Enviroment->Library->Directories-> Library Path 添加FassMM路径(在Delphi安装目录下建立FastMM文件夹,“C:\Program Files

疯流人物 1766

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

delphi 7 下使用 fastmm4

在 delphi 7 下使用 fastmm4 ,大致如下步骤:一、准备工作1、将文件 BorlndMM.dll,替换掉 Delphi/Bin 目录下的相应文件;2、设置路径:Enviroment->Library->Directories-> Library Path 添加FassMM路径(在Delphi安装目录下建立FastMM文件夹,“C:\Program Files\Bor...

weixin_34409357的博客 612

delphi 2010 fastMM 内存泄露使用方法

Delphi2010集成了fastMM,这回大家调试程序是的时候可以方便地检查内存泄露了。使用方法如下:在project中,添加一行 ReportMemoryLeaksOnShutdown := DebugHookDebugHookprogram Project1;uses  Forms,  Unit1 in Unit1.pas { Form1 } ;{$R *.res}

SUNSTONE的Delphi笔记 6082
上一篇: JIURL玩玩Win2k 对象
下一篇: Recon
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值