问题标签 [fastmm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Delphi 7.0 和内存泄漏?
在花时间使用 FastMM4 清除任何可能导致 FastMM4 指示的内存泄漏的代码之后,我们已经在 Windows 7 上测试了大约一个月的不间断运行我们的软件。这是我到目前为止所看到的我的软件进程的任务管理器。
这是否意味着我们的软件存在内存泄漏?我很困惑和担心。
提前致谢,
string - 使用 FastMM4,如何注册泄露的字符串?
使用 FastMM4 可以轻松注册泄露的指针,但不能注册泄露的字符串。显然,@
应用于字符串的运算符并没有真正给我们整个字符串,也不是PChar(string)
;我可以用什么来很好地注册泄漏的字符串?
现在我发现这是可行的:
但它依赖于幻数12
,这取决于版本,并且代码实际上并没有表达发生了什么。我希望某处有一个 RTL 函数,它接受一个字符串并返回一个指向字符串“基”的指针,或者FastMM4
我忽略的一些方法。
我可以在这样的过程中打包那个丑陋的表达野兽,但我仍然觉得它很笨拙:
这应该与问题无关。这就是我泄漏字符串的原因:
我正在使用缓存机制来存储应用程序生命周期内的某些数据。我不打算释放这些对象,因为我在应用程序的生命周期中确实需要它们,并且通过适当的最终确定只会在应用程序关闭时浪费时间。这些对象包含一些字符串字段,因此显然这些字符串是“泄露的”。
delphi - 如何在 Delphi XE 下打开/关闭 FastMM 内存泄漏报告?
如何在 Delphi XE 下打开/关闭 FastMM 内存泄漏报告?在 Delphi 7 下,我不得不修改 inc 文件。但我听说 Delphi XE 已经集成了 FastMM。如何访问 FastMM 设置?
我从德尔福帮助中得到了这个:
SourceForge 上提供了内存管理器 (FastMM) 的完整源代码。
使用完整版的 FastMM,您可以在特殊的“调试”模式下运行内存管理器,这对于检测堆损坏和内存泄漏很有用。FastMM 完整版的附加功能:
双自由对象/接口
文件记录和报告
更多信息请参见 FastMM 源代码(FastMM4.pas 和 FastMM4Options.inc)中的注释。
所以看起来我仍然需要手动安装 FastMM。但是我必须在项目的USES 子句中包含“FastMM4”吗?
delphi - FastMM 是否支持保留虚拟内存并调用块来增长数组?
我知道我可以使用 VirtualAlloc 保留虚拟内存。
例如,我可以申请 1GB 的虚拟内存,然后调用其中的第一个 MB 来放入我不断增长的数组。
当数组超过 1MB 时,我会调用第 2 个 MB,依此类推。
这样,当阵列增长时,我不需要在内存中移动阵列,它只是保持原位,英特尔/AMD 虚拟内存管理器会处理我的问题。
但是 FastMM 是否支持这种结构,所以我不必自己进行内存管理?
伪代码:
FastMM 支持这个吗?
delphi - FastMM 无法检测到内存泄漏
我在 Delphi5 的应用程序中使用 FastMM 4.97。
一切正常,如果我从 IDE 运行我的应用程序并故意泄漏以进行测试。我得到适当的通知和错误日志。
但是,如果我在 IDE 之外运行我的应用程序(例如从 Windows 资源管理器运行 .exe 文件),则什么也不会发生。
我错过了什么吗?这种行为是有意的吗?可以改变吗?
delphi - Delphi XE2:FastMM 是否适用于 Win64 应用程序?
我在我的 Delphi 应用程序中使用 FastMM 来跟踪内存泄漏,尤其是在 FullDebugMode 中。随着 Delphi XE2 的新发布,我们可以使用 FastMM 作为内存管理器吗?FastMM 可以在 Win64 平台上工作吗?
delphi - 无法让 FastMM4 与使用 ASProtect 保护的 Delphi 7 应用程序一起工作
我收到此错误,“FastMM4 无法安装,因为内存已通过默认内存管理器分配”。我在我的 Delphi 7 应用程序中使用了 ASProtect 和 Eurekalog(不过 Eurekalog 没有问题)。我已经根据需要将 FastMM4 作为第一个单元。
后来我发现ASProtect可以在运行应用程序之前执行一个DLL。
*外部用户代码*从这个版本开始,ASProtect 实现了外部动态库 > 使用功能。
如果您希望自己的代码在主应用程序启动之前由 ASProtect执行,这可能非常有用。您应该向 ASProtect 提供所选 DLL 的完整路径。该库将在保护 > 步骤中添加到 ASProtect 代码中。在运行主应用程序之前,只有一个功能将由 ASprotect 在运行时执行。函数声明:
Delphi:函数 RunApplication() :布尔值;出口;
如果函数结果为 TRUE,ASProtect 将启动主应用程序,否则会出现错误消息。警告:如果您想访问 DLL 的资源,请使用 DialogBoxIndirect 或 > CreateDialogBoxInderect 类 API。所有其他 WinAPI 函数(如 FindResorceA、LoadResource 等)可能无法正常工作并返回错误结果。
因此,我使用以下内容创建了一个 DLL,但这无济于事。
图书馆fastmem;
在“FastMM4.pas”、SysUtils、对话框、类中使用 FastMM4;
{$R *.res}
开始显示消息('好的!');结尾。
之后,我运行我的应用程序,它在显示“FastMM4 无法安装,因为内存已通过默认内存管理器分配”错误之前显示“确定”消息框。
关于如何解决这个问题的任何想法?我可以禁用 Delphi 的默认内存管理器吗?谢谢。:)
注意:ASProtect 不再提供论坛支持。
delphi - Delphi 内存问题 (FastMM4)
从事一个使用工厂来构造对象的项目。我将指向工厂函数的指针全局保存在 vars 中(我知道不好),并在初始化时注册它们。
我最近很想看看这个项目是否有内存泄漏,所以决定下载 FastMM4 并查看一下。它提出了一些我可以修复的错误,但我有点难过似乎我没有释放与工厂相关的内存,如下面的代码所示,我遇到了一个小的内存泄漏。不荒谬但令人讨厌。
我会用什么来释放内存(如果是这样的话)我试过 dispose(@factoryfunction) 但似乎破坏了一切。我不太擅长低级指针的东西总是让我感到困惑,所以如果有人可以提供帮助,那就太好了。
我在下面包含了一个示例,我刚刚从头顶写下了它,说明了我遇到的问题。
干杯,
巴里
delphi - Fastmm 与 New 和 Dispose Delphi 6
我有一些 Delphi 6 代码使用 New 分配内存并使用 Dispose 释放它。我单步执行了代码,发现 New 和 Dispose 实际上都被调用了。
我想知道为什么 FastMM 报告内存泄漏,即使调用了 Dispose。这可能与正在处理的项目位于 var 部分中的事实有关吗?
这是来自 FastMM 的信息。
delphi - 如何访问 FastMM4 的 RegisterExpectedMemoryLeak?
我正在使用 Delphi 的 fastMM 内存管理器,但在尝试使用完整调试模式时失败了。
编译时出现以下错误:
.inc 文件告诉加载完整的调试 dll。我已经将 FastMM_FullDebugMode.dll 文件复制到各处。看起来我应该在我的项目中包含一些东西。
我可能错过了一些非常明显的东西。
Delphi 版本是 7。