Delphi 内存分配 StrAlloc New
2020-02-14 01:15
453 查看
Delphi 内存分配 StrAlloc New
引自:http://anony3721.blog.163.com/blog/static/5119742010824934164/ 给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc.StrAlloc 虽然最终也是调用了 GetMem, 但 StrAlloc 会在指针前面添加 Delphi 需要的 4 个管理字节(记录长度).
StrAlloc 分配的内存, 用 StrDispose 释放, 用 StrBufSize 获取大小.
用 FreeMem 释放可以吗? 这样会少释放 4 个字节.
这种类型的指针一般用于 API 函数的参数, 譬如获取窗口标题:
var
p: PChar;
begin
p := StrAlloc(256);
GetWindowText(Handle, p, StrBufSize(p));
ShowMessage(p); {Form1}
StrDispose(p);
end;
还有一对非常重要的相关函数: GlobalAllocPtr、GlobalFreePtr; 它们的功能是上面这些都不可替代的!
GlobalAllocPtr 和 GlobalFreePtr 是对系统函数: GlobalAlloc、GlobalFree 的简化, 之所以说它们重要, 只是因为它们可以跨进程操作; 不过 GlobalAllocPtr 是给无类型指针(Pointer)分配内存, 当然就不仅仅用于字符指针了.
New 是给已知大小的指针分配内存;
GetMem 主要是给无类型指针分配内存;
尽量使用 GetMemory 来代替 GetMem.
关于 FreeMemory 与 FreeMem 的区别:
1、FreeMemory 会检查是否为 nil 再 FreeMem, 这有点类似: Free 与 Destroy;
2、FreeMem 还有个默认参数可以指定要释放的内存大小, 不指定就全部释放(没必要只释放一部分吧);
3、New 对应的 Dispose 也可以用 FreeMem 或 FreeMemory 代替.
尽量使用 FreeMemory 来释放 GetMem、GetMemory、AllocMem、ReallocMem、ReallocMemory 分配的内存.
ReallocMem、ReallocMemory 是在已分配的内存的基础上重新分配内存, 它俩差不多 ReallocMemory 比 ReallocMem 多一个 nil 判断, 尽量使用 ReallocMemory 吧.
转载于:https://www.cnblogs.com/Simon_01/archive/2011/03/11/1980542.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Delphi 的编译指令
- delphi资源文件制作及使用详解
- 使用DelphiXE10动态创建Firebird嵌入式数据库文件
- Delphi 7连接MySql
- 用delphi解决MySQL数据库中无图形界面的问题
- DELPHI HOOK随手笔记
- DELPHI 读取EXCEL 以及将EXCEL写入到ACCESS 数据库
- delphi TByteArray 装换成base64
- Python for delphi教程
- 检查IP地址是否有效(delphi)
- delphi AddObject 用法
- delphi 动态创建 复选框控件
- delphi 通过点击获取控件名称
- Delphi中@,^,#,$分别表示什么?
- Delphi 运行时错误信息表
- Delphi 编译错误信息表
- Delphi 的运算符列表
- Delphi 快捷键
- Windows API 的数据类型与 Delphi 数据类型对照表
- Delphi7程序调用C#写的DLL解决办法(DLL)