您的位置:首页 > 编程语言 > Delphi

Delphi 内存分配 StrAlloc New(转)

2015-06-13 15:35 351 查看
源:Delphi内存分配StrAllocNew

引自: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吧.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐