日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Delphi 的內(nèi)存操作函數(shù)(4): 清空與填充內(nèi)存

 獨(dú)孤求財(cái) 2012-03-30

FillMemory、ZeroMemory 一目了然的兩個(gè)函數(shù), 但其實(shí)它們都是調(diào)用了 FillChar;

清空不過(guò)就是填充空字符(#0: 編號(hào)為 0 的字符), 說(shuō)來(lái)說(shuō)去是一回事.

為了下面的測(cè)試, 先寫(xiě)一個(gè)以十六進(jìn)制方式查看內(nèi)存的函數(shù):
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;
    Inc(pb);
  end;
end; {GetMemBytes end}

//測(cè)試:
var
  p1: PAnsiChar;
  p2: PWideChar;
  s1: AnsiString;
  s2: UnicodeString;
begin
  p1 := 'ABCD';
  p2 := 'ABCD';
  s1 := 'ABCD';
  s2 := 'ABCD';

  ShowMessage(GetMemBytes(p1,4)); {41 42 43 44}
  ShowMessage(GetMemBytes(p2,8)); {41 00 42 00 43 00 44 00}
  ShowMessage(GetMemBytes(s1,4)); {41 42 43 44}
  ShowMessage(GetMemBytes(s2,8)); {41 00 42 00 43 00 44 00}
end;


測(cè)試 FillMemory、ZeroMemory、FillChar 三個(gè)填充函數(shù):
const
  num = 10;
var
  p: PChar;
begin
  p := StrAlloc(num);

  ShowMessage(GetMemBytes(p, num)); {從結(jié)果看出 StrAlloc 沒(méi)有初始化內(nèi)存}

  FillMemory(p, num, Byte('A'));
  ShowMessage(GetMemBytes(p, num)); {41 41 41 41 41 41 41 41 41 41}

  ZeroMemory(p, num);
  ShowMessage(GetMemBytes(p, num)); {00 00 00 00 00 00 00 00 00 00}

  FillChar(p^, num, 'B');
  ShowMessage(GetMemBytes(p, num)); {42 42 42 42 42 42 42 42 42 42}

  StrDispose(p);
end;


此時(shí), 我想到一個(gè)問(wèn)題:
GetMem 和 GetMemory 沒(méi)有初始化內(nèi)存; AllocMem 會(huì)初始化內(nèi)存為空, 那么
ReallocMem、ReallocMemory 會(huì)不會(huì)初始化內(nèi)存?
測(cè)試一下(結(jié)果是沒(méi)有初始化):
{測(cè)試1}
var
  p: Pointer;
begin
  p := GetMemory(3);
  ShowMessage(GetMemBytes(p, 3));
  ReallocMem(p, 10);
  ShowMessage(GetMemBytes(p, 10)); {沒(méi)有初始化}
  FreeMemory(p);
end;

{測(cè)試2}
var
  p: Pointer;
begin
  p := AllocMem(3);
  ShowMessage(GetMemBytes(p, 3));
  ReallocMem(p, 10);
  ShowMessage(GetMemBytes(p, 10)); {沒(méi)有初始化}
  FreeMemory(p);
end;


另外: FillMemory、ZeroMemory 的操作對(duì)象是指針, 而 FillChar 的操作對(duì)象則是實(shí)體.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多