摘要:
通过内存映像文件共享一组对象 阅读全文
摘要:
通過網絡傳輸對象之前,必須要對對象進行串行化(流化)處理,然後發送串行化的流。當接收方根據接收到的流還原對象出來。 function RecordsetToXML(const Recordset: _Recordset): string; var RS: Variant; Stream: TStri 阅读全文
摘要:
MoveMemory、CopyMemory 的功能是一模一样的, 都是复制内存, 都是调用 Move 过程;MoveMemory、CopyMemory 操作指针; Move 操作实体.还要注意, 它们的参数位置不一样! 举例: {例1}var buf1,buf2: array[0..9] of AnsiChar;begin buf1 := '0123456789'; buf2 := 'abcdefghij'; Move(buf2[2], buf1[4], 5); ShowMessage(buf1); {0123cdefg9} ShowMessage(buf2); 阅读全文
摘要:
马上能想到的函数有: GetMemAllocMemReallocMemFreeMemGetMemoryReallocMemoryFreeMemoryNewDisposeNewStrDisposeStrStrNewStrAllocStrDisposeGlobalAllocPtrGlobalFreePtrWideStrAllocAnsiStrAllocStrDisposeMoveMoveMemoryCopyMemoryZeroMemoryFillMemoryFillCharStrBufSize给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc 阅读全文
摘要:
静态数组, 在声明时就分配好内存了, 譬如: var arr1: array[0..255] of Char; arr2: array[0..255] of Integer;begin ShowMessageFmt('数组大小分别是: %d、%d', [SizeOf(arr1), SizeOf(arr2)]); {数组大小分别是: 512、1024}end;对静态数组指针, 虽然在声明之处并没有分配内存, 但这个指针应该分配多少内存是有定数的.这种情况, 我们应该用 New 和 Dispose 来分配与释放内存. 譬如: type TArr1 = array[0..255] o 阅读全文
摘要:
使用结构或结构数组, 一般是不需要主动分配内存的, 譬如: var pts: TPoint;begin pts.X := 1; pts.Y := 2; ShowMessageFmt('%d,%d', [pts.X, pts.Y]); {1,2}end;//结构数组:var Arr: array[0..2] of TPoint; i: Integer;begin for i := 0 to Length(Arr) - 1 do begin Arr[i].X := i; Arr[i].Y := Trunc(Sqr(i)); end; ShowMessageFmt('... 阅读全文
摘要:
FillMemory、ZeroMemory 一目了然的两个函数, 但其实它们都是调用了 FillChar;清空不过就是填充空字符(#0: 编号为 0 的字符), 说来说去是一回事.为了下面的测试, 先写一个以十六进制方式查看内存的函数: function GetMemBytes(var X; size: Integer): string;var pb: PByte; i: Integer;begin pb := PByte(X); for i := 0 to size - 1 do begin Result := Result + IntToHex(pb^, 2) + #32;... 阅读全文
摘要:
var Source,Dest: string;begin Source := '123456789'; Dest := '---------'; Move(Source[5], Dest[3], 4); ShowMessage(Dest); {--5678---}end; 阅读全文
摘要:
uses zlib; //将Src使用Zlib压缩后存入Dst当中 procedure PackStream(const Src:TStream; Dst:TStream); var CompStream: TCompressionStream; begin //增加“断言”以防止输入参数有误 Assert(Src <> Nil); Assert(Dst <> Nil); CompStream := TCompressionStream.Create(clDefault,Dst); try //将源数据的偏移转到首部 Src.Seek(0,soFromBeginning 阅读全文
摘要:
格式:操作数 Shl/Shr 移动位数说明:操作数与返回值都是整数例子:16(10) = 10000(2) 16(10) Shr 1 = 10000(2) Shr 1 = 1000(2) = 8(10) 16(10) Shr 2 = 10000(2) Shr 2 = 100(2) = 4(10)说明:一个整数(I)按位左移一位,相当于把它乘以2,即 I * 2 一个整数(I)按位右移一位,相当于把它除以2,即 I Div 2 一个整数(I)按位左移2 位,相当于把它乘以2再乘2,即 (I * 2) * 2 一个整数(I)按位右移2 位,相当于把它除以2再除2,即 (I Div 2) Div 2 阅读全文