ReallocMem有严重问题?

baseyueliang baseyueliang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
btnBigMem: TButton;
btnSmallMem: TButton;
btn1: TButton;
procedure btnBigMemClick(Sender: TObject);
procedure btnSmallMemClick(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
FList: TList;
procedure ClearList;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
end;

var
Form1: TForm1;

implementation

const
RepeatCount = 5000;

{$R *.dfm}

procedure TForm1.AfterConstruction;
begin
inherited;
FList := TList.Create;
end;

procedure TForm1.BeforeDestruction;
begin
inherited;
FList.Free;
end;

procedure TForm1.btnBigMemClick(Sender: TObject);
var
i: Integer;
tmp, p: Pointer;
begin
tmp := nil;
for i := 1 to RepeatCount do
begin
//GlobalReAllocPtr(FData, i * SizeOf(Pointer), HeapAllocFlags);//换这个就没问题
ReallocMem(tmp, i * SizeOf(Pointer));
GetMem(p, 4);
FList.Add(p);
end;
FreeMem(tmp);
end;

procedure TForm1.btnSmallMemClick(Sender: TObject);
var
i: Integer;
tmp, p: Pointer;
begin
tmp := nil;
for i := 1 to RepeatCount do
begin
ReallocMem(tmp, i * SizeOf(Pointer));
end;

for i := 1 to RepeatCount do
begin
GetMem(p, 4);
FList.Add(p);
end;

FreeMem(tmp);
end;

procedure TForm1.ClearList;
var
i: Integer;
p: Pointer;
begin
for i := 0 to FList.Count - 1 do
begin
p := FList[i];
FreeMem(p);
end;
FList.Clear;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
ClearList;
end;

end.

//第1次执行btnBigMemClick之后内存暴涨50M,
//而同样程序启动后,执行btnSmallMemClick,内存几乎没有变化

//此问题影响到SetLength和TObject.Create,因为都是用到了类似的内存分配机制
...全文

相关推荐

Delphi的内存管理器.pdf

同时,文档也警告开发者,如果需要开发自己的内存管理器,必须对内存管理有深入的理解,否则可能会带来严重的后果。

chunyangsuhao

Delphi 13.1控件之borlndmm.rar

其导出函数集包括AllocMem、ReallocMem、FreeMem、GetMemoryManager、SetMemoryManager等标准接口,允许开发者在必要时替换默认内存管理器以适配特定性能需求或诊断内存泄漏问题

tjsoft

AI大模型开发V2第四阶段 PyTorch框架使用配套代码

AI大模型开发V2第四阶段 PyTorch框架使用【配套代码】

FBI HackerHarry浩

PHP后端开发Laravel与ThinkPHP框架实战及Web安全防护VIP技术手册

本手册为一份完整的 PHP 后端开发与安全实战 Word 文档(.docx,可编辑,约 6500 字正文 + 13 幅原创配图),内容涵盖:PHP 8.x 环境搭建与 Composer 工程化、Laravel 10 博客系统完整开发(建模、认证、CRUD、测试)、ThinkPHP 6 RESTful API 开发(验证器、Token 认证、限流、统一响应)、Symfony 6.4 微服务架构与 Docker 部署、SQL 注入/XSS/CSRF/文件上传五大漏洞原理与修复、HTTPS 与 AES-256-GCM 加密存储、OPcache/Redis/负载均衡性能调优,以及上线前安全检查清单与命令速查附录。 适用人群:PHP 初学者、全栈开发者、准备面试或项目实战的后端工程师、需要进行安全加固的运维与开发人员。 使用场景及目标:从零搭建可运行的博客/API 项目,掌握主流框架开发流程,建立完整的 Web 安全防护与性能优化知识体系,可直接作为团队培训教材或上线评审 checklist 使用。

云博士的AI课堂

超扭滑模与快速终端滑模的永磁同步电机无感控制:理论、离散化实现与仿真研究(Simulink仿真实现)

内容概要:本文系统研究了超扭滑模控制(STSMC)与快速终端滑模控制(FTSMC)在永磁同步电机(PMSM)无感控制中的应用,深入探讨了两种先进非线性控制策略的理论基础、离散化实现方法及Simulink仿真实验。文章重点分析了基于高频信号注入法的PMSM零低速无位置传感控制技术,有效解决了传统物理传感器难以安装或成本高昂场合下的转子位置与速度估算难题。通过构建高阶滑模控制器与磁链无感观测器,实现了对电机状态的精确估计与鲁棒控制,显著提升了系统在动态响应、抗外部干扰和稳态精度方面的综合性能。研究涵盖控制算法设计、离散化处理、抖振抑制策略以及仿真验证全过程,为高性能、高可靠性电机驱动系统的设计提供了完整的理论支撑与实践范例。; 适合人群:具备自动控制理论、现代电机控制技术基础,熟悉MATLAB/Simulink仿真环境,并从事电气传动、新能源汽车、工业自动化、航空航天等领域的高校研究生、科研人员及工程技术人员。; 使用场景及目标:①研究和设计无需位置传感器的永磁同步电机控制系统,降低系统成本与维护难度;②深入掌握超扭滑模与快速终端滑模控制算法的核心原理、稳定性分析方法及其在数字控制器中的离散化实现技术;③利用Simulink搭建完整的电机控制仿真平台,验证先进滑模控制策略在不同工况下的有效性、鲁棒性与动态性能;④为高精度伺服系统、电动汽车电驱系统、轨道交通牵引系统等对可靠性和性能要求严苛的应用场景提供先进的无感控制解决方案。; 阅读建议:建议读者结合文中提供的Simulink仿真模型与相关参考文献,深入理解滑模控制的设计思想、切换函数构造原则与控制器参数整定方法,重点关注滑模观测器的设计流程与抖振抑制技术(如引入边界层或高阶滑模),同时可通过仿真对比不同控制策略的性能差异,并进一步拓展至其他先进非线性控制策略(如自适应滑模、模糊滑模)的研究与对比实验。

荔枝科研社
评论 16
收藏 已收藏
分享
返回顶部
baseyueliang
Delphi 5,944 成员 262,941 内容