双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

Delphi的内存管理器.pdf

chunyangsuhao

Delphi 13.1控件之borlndmm.rar

Delphi 13.1控件之borlndmm.rar

tjsoft

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

BIZKEEN

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

nLif

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

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