Delphi的学习笔记八——内存操作函数
来源:互联网 发布:python的函数参数传递 编辑:程序博客网 时间:2024/05/15 19:55
给字符串分配指针,我们马上可以联想到有以下这些函数可供选择:
当然,也可以用其它方法给字符串指针分配内存(数组的内存由系统自动分配和释放),我们手动分配的内存则必须手动释放。例如
NewStr、DisposeStr为了兼容而存在的,Delphi不提倡使用。用@即可获取字符串指针。
StrNew、StrDispose:用来复制一个相同的字符串指针。例如:
New、Dispose:用来分配已知内存大小的指针。例如:
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;
当然,也可以用其它方法给字符串指针分配内存(数组的内存由系统自动分配和释放),我们手动分配的内存则必须手动释放。例如
{用其它方法分配指针}procedureTForm1.Button16Click(Sender:TObject);varbuf:array[0..MAX_PATH]ofChar;begin//获取WINDOWS所在目录GetWindowsDirectory(buf,Length(buf));ShowMessage(buf);end;
NewStr、DisposeStr为了兼容而存在的,Delphi不提倡使用。用@即可获取字符串指针。
StrNew、StrDispose:用来复制一个相同的字符串指针。例如:
procedureTForm1.Button17Click(Sender:TObject);varp1,p2:PChar;beginp1:='Delphi7';p2:=StrNew(p1);ShowMessageFmt('%s,%s',[p1,p2]);StrDispose(p2);end;
New、Dispose:用来分配已知内存大小的指针。例如:
{new、dispose函数}procedureTForm1.Button18Click(Sender:TObject);typeTArr1=array[0..255]ofChar;TArr2=array[0..255]ofInteger;PArr1=^TArr1;//定义数组指针PArr2=^TArr2;vararr1:PArr1;arr2:PArr2;beginNew(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)。
procedureTForm1.Button19Click(Sender:TObject);typeTArr=arrayofInteger;vararr:arrayofInteger;p:Pointer;beginSetLength(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的学习笔记七——格式化输出函数(总结的很全面)
- delegate和protocol
- jsp常见错误
- Java内存模型
- Linux 下gpio
- HDU3579 一元线性同余方程
- Delphi的学习笔记八——内存操作函数
- 编程珠玑 第二版 第一章
- IOS:如何使用多张图片合成GIF
- 嵌入式 BOA 服务器移植(本人亲测)和遇到的部分问题总结
- LeiGe脚本学习: 定期完成同步功能或其他功能的开发思路 思考 ~~Myself!
- E版Openstack通过dashboard创建卷失败一例(01)
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-3跑分测试
- struts2输出JSON
- 在集群上运行topology