摘要:
对静态数组指针, 虽然在声明之处并没有分配内存, 但这个指针应该分配多少内存是有定数的.这种情况, 我们应该用 New 和 Dispose 来分配与释放内存. 譬如: type TArr1 = array[0..255] of Char; TArr2 = array[0..255] of Integer;var arr1: ^TArr1; arr2: ^TArr2;begin New(arr1); New(arr2); arr1^ := '万一的 Delphi 博客'; ShowMessageFmt('%s%s', [arr1^[0], arr1^[1]]); 阅读全文
摘要:
但在很多时候, 一些参数是结构指针; 特别是在接受数据时, 一般需要手动分配内存. 如果只使用一个单结构指针, 用 New 分配内存是最合适的, 譬如: var p: PPoint; {这是点结构 TPoint 的指针, 系统早定义好的}begin New(p);// p^.X := 1; p^.Y := 2; {或者写成下面这样} p.X := 1; p.Y := 2; ShowMessageFmt('%d,%d', [p.X, p.Y]); Dispose(p);end; 阅读全文
摘要:
StrAlloc 虽然最终也是调用了 GetMem, 但 StrAlloc 会在指针前面添加 Delphi 需要的 4 个管理字节(记录长度).StrAlloc 分配的内存, 用 StrDispose 释放, 用 StrBufSize 获取大小.用 FreeMem 释放可以吗? 这样会少释放 4 个字节.这种类型的指针一般用于 API 函数的参数, 譬如获取窗口标题:--------------------------------------------------------------------------------var p: PChar;begin p := StrAlloc(25 阅读全文
摘要:
FillMemory、ZeroMemory 一目了然的两个函数, 但其实它们都是调用了 FillChar;清空不过就是填充空字符(#0: 编号为 0 的字符), 说来说去是一回事.为了下面的测试, 先写一个以十六进制方式查看内存的函数:--------------------------------------------------------------------------------function GetMemBytes(var X; size: Integer): string;var pb: PByte; i: Integer;begin pb := PByte(X); for 阅读全文
摘要:
move()var buf1,buf2: array[0..9] of AnsiChar;begin buf1 := '0123456789'; buf2 := 'abcdefghij'; Move(buf2[2], buf1[4], 5); ShowMessage(buf1); {0123cdefg9} ShowMessage(buf2); {abcdefghij}end;copymemory()var buf1,buf2: array[0..9] of AnsiChar;begin buf1 := '0123456789'; buf2 := 阅读全文
摘要:
1、创建工程,在窗体中加入IdSMTP1、IdMessage1和IdPOP31(Indy控件标签组)控件各一个。 2、设置 IdSMTP1.Host := 'SMTP.163.com';(我用的是163检试,具体也可选择其它服务器) IdSMTP1.Username := 'caoyan528';(此处即表示邮箱的帐号名,例如邮箱为:aaaaaa@163.com,则Username即为aaaaaa) IdSMTP1.Password := 'XXXXXXXX';(此处即为邮箱的密码,如aaaaaa@163.com邮箱密码为123456,则Pass 阅读全文
摘要:
首先在下载的文件里你会找到一个文件,位置在Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下的相应文件就可以完成对IDE的提速。 对自己编的程序的提速也非常简单,只要在.dpr工程文件里的uses部分加上FastMM4就可以了,但必须是加在第一位,还要记得设置 路径。重新编译你的程序就可以完成提速。一般情况下,感觉程序的启动速度会有提高。如果你的程序有内存泄漏的话那就会在程序关闭时弹出一个对话框告诉你你 的程序有内存泄漏,并指出相应的有内存泄漏的类。例如,我的程序 阅读全文