Delphi的学习笔记八——内存操作函数
来源:互联网 发布:ios 数组按长度切割 编辑:程序博客网 时间:2024/04/29 12:49
给字符串分配指针,我们马上可以联想到有以下这些函数可供选择:
GetMemAllocMemReallocMemFreeMemGetMemoryReallocMemoryFreeMemoryNewDisposeNewStrDisposeStrStrNewStrAllocStrDisposeGlobalAllocPtrGlobalFreePtrWideStrAllocAnsiStrAllocStrDisposeMoveMoveMemoryCopyMemoryZeroMemoryFillMemoryFillCharStrBufSize
给字符指针(PChar、PWideChar、PAnsiChar)分配内存,最佳选择是:StrAlloc;用StrDispose释放。例如:
procedure TForm1.Button15Click(Sender: TObject);var p: PChar;begin //分配内存 p := StrAlloc(256); GetWindowText(Handle,p,StrBufSize(p)); ShowMessage(p); //释放内存 StrDispose(p);end;
当然,也可以用其它方法给字符串指针分配内存(数组的内存由系统自动分配和释放),我们手动分配的内存则必须手动释放。例如
{用其它方法分配指针}procedure TForm1.Button16Click(Sender: TObject);var buf : array[0..MAX_PATH] of Char;begin //获取WINDOWS所在目录 GetWindowsDirectory(buf,Length(buf)); ShowMessage(buf);end;
NewStr、DisposeStr为了兼容而存在的,Delphi不提倡使用。用@即可获取字符串指针。
StrNew、StrDispose:用来复制一个相同的字符串指针。例如:
procedure TForm1.Button17Click(Sender: TObject);var p1,p2:PChar;begin p1:='Delphi7'; p2:= StrNew(p1); ShowMessageFmt('%s,%s',[p1,p2]); StrDispose(p2);end;
New、Dispose:用来分配已知内存大小的指针。例如:
{new、dispose函数}procedure TForm1.Button18Click(Sender: TObject);type TArr1 = array[0..255] of Char; TArr2 = array[0..255] of Integer; PArr1 = ^TArr1; //定义数组指针 PArr2 = ^TArr2;var arr1 : PArr1; arr2 : PArr2;begin New(arr1); //给数组指针分配内存 New(arr2); arr1^ :='万一的博客'; //给数组赋值 ShowMessageFmt('%s%s',[arr1[0],arr1[1]]); arr2[Low(arr2^)] := Low(Integer); arr2[High(arr2^)]:= MaxInt; ShowMessageFmt('%d,%d',[arr2[0],arr2[255]]); Dispose(arr1); //释放内存 Dispose(arr2);end;
GetMem、FreeMem:给无类型指针分配内存,不会进行初始化。(尽量用GetMemory、FreeMemory替换 GetMem、FreeMem)。
procedure TForm1.Button19Click(Sender: TObject);type TArr = array of Integer;var arr : array of Integer; p: Pointer;begin SetLength(arr,3); arr[0] := Random(100); arr[1] := Random(100); arr[2] := Random(100); ShowMessageFmt('%d,%d,%d',[arr[0],arr[1],arr[2]]); //GetMem(p,3*Sizeof(Integer)); //为无类型的指针分配内存 p:=GetMemory(3*SizeOf(Integer)); TArr(p)[0]:=Random(100); //无类型的指针转化为动态类型的数组指针 TArr(p)[1]:=Random(100); TArr(p)[2]:=Random(100); ShowMessageFmt('%d,%d,%d',[TArr(p)[0],TArr(p)[1],TArr(p)[2]]); //FreeMem(p); //释放内存 FreeMemory(p);end;
AllocMem、FreeMemory:分配内存后同时初始化为空。
尽量使用FreeMemory来释放GetMem、GetMemory、AllocMem、ReallocMem、ReallocMemory分配内存
ReallocMemory:在已分配内存的基础上重新分配内存。- Delphi的学习笔记八——内存操作函数
- Delphi的学习笔记八——内存操作函数
- Delphi的学习笔记八——内存操作函数
- Delphi的学习笔记——内存操作函数
- Delphi 的内存操作函数:复制内存
- Delphi 的内存操作函数(5): 复制内存
- Oracle学习笔记(八)——java操作Oracle
- C++学习笔记(八):对字符的操作函数和范围for语句的使用
- Python学习笔记(八)——有关文件的操作
- OpenCV学习笔记八——常用数据结构和函数
- python学习笔记(八)——函数
- Delphi 的内存操作函数-1,2,3,4
- Delphi的学习笔记——类
- Delphi学习笔记六——文件路径相关的字符串操作
- Delphi学习笔记六——文件路径相关的字符串操作
- Delphi学习笔记——文件路径相关的字符串操作(综合)
- Delphi学习笔记六——文件路径相关的字符串操作
- Delphi的学习笔记七——格式化输出函数(总结的很全面)
- (总结)Nginx与Apache、Tomcat、Resin动静分离核心配置
- iPhone 第四天
- Virgo Tomcat Server简析
- 全球企业专利实力排行榜:华为和清华大学在列
- 在ASP.NET高级中运用DataList使用存储过程实现分页
- Delphi的学习笔记八——内存操作函数
- C#异步分步调用
- MySQL带参数的存储过程小例子
- 电脑设置成护眼色
- 【OpenStack】Quantum中的L3模型实战
- 在ASP.NET高级中运用repeater控件来实现禁用与启用。
- 输出所有三位数中,能被11整除,并且各位数字和为10的数
- CityEngine2012概览
- Js中算术函数math对象的用法: