Delphi的学习笔记八——内存操作函数
2012-12-20 11:49
531 查看
给字符串分配指针,我们马上可以联想到有以下这些函数可供选择:
给字符指针(PChar、PWideChar、PAnsiChar)分配内存,最佳选择是:StrAlloc;用StrDispose释放。例如:
当然,也可以用其它方法给字符串指针分配内存(数组的内存由系统自动分配和释放),我们手动分配的内存则必须手动释放。例如
NewStr、DisposeStr为了兼容而存在的,Delphi不提倡使用。用@即可获取字符串指针。
StrNew、StrDispose:用来复制一个相同的字符串指针。例如:
New、Dispose:用来分配已知内存大小的指针。例如:
GetMem、FreeMem:给无类型指针分配内存,不会进行初始化。(尽量用GetMemory、FreeMemory替换 GetMem、FreeMem)。
AllocMem、FreeMemory:分配内存后同时初始化为空。
尽量使用FreeMemory来释放GetMem、GetMemory、AllocMem、ReallocMem、ReallocMemory分配内存
ReallocMemory:在已分配内存的基础上重新分配内存。
GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemory FillChar StrBufSize
给字符指针(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的学习笔记八——内存操作函数
- JS学习笔记1——不要使用JavaScript内置的parseInt()和Number()函数,利用map和reduce操作实现一个string2int()函数
- linux内存操作--ioremap和mmap学习笔记
- 学习笔记之资源操作相关函数
- Delphi 的内存操作函数(1): 给字符指针分配内存
- 2013-7-10学习笔记[字符串操作,指向函数的指针]
- Delphi 的内存操作函数(1): 给字符指针分配内存
- python学习笔记: 一些有用的文件操作函数
- Delphi 的内存操作函数(4): 清空与填充内存
- 【Lua学习笔记】 --> 《字符串string与table的函数操作》
- Delphi 的内存操作函数(2): 给数组指针分配内存
- 2013-7-10学习笔记[字符串操作,指向函数的指针]
- Delphi 的内存操作函数(2): 给数组指针分配内存
- linux内存操作--ioremap和mmap学习笔记
- Delphi 的内存操作函数(5): 复制内存
- Delphi 的内存操作函数-1,2,3,4
- Lucene学习笔记-内存与文件索引的简单操作
- Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
- linux内存操作--ioremap和mmap学习笔记