捐助郴維網
感謝您對郴維網的支持,你的支持將是郴維網持續發展的動力!
二維碼
×
當前位置:郴維網 >基礎知識 > 正文
12 2021.12

Delphi 的內存操作函數(4): 清空與填充內存

點擊次數:306 更新時間:2021-12-12 15:08:12  【打印此頁

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;
    Inc(pb);
  end;
end; {GetMemBytes end}

// 測試:
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;

測試 FillMemory、ZeroMemory、FillChar 三個填充函數:

const
  num = 10;
var
  p: PChar;
begin
  p := StrAlloc(num);

  ShowMessage(GetMemBytes(p, num)); {從結果看出 StrAlloc 沒有初始化內存}

  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;

此時, 我想到一個問題:

GetMem 和 GetMemory 沒有初始化內存; AllocMem 會初始化內存為空, 那么

ReallocMem、ReallocMemory 會不會初始化內存?

測試一下(結果是沒有初始化):

{測試1}
var
  p: Pointer;
begin
  p := GetMemory(3);
  ShowMessage(GetMemBytes(p, 3));
  ReallocMem(p, 10);
  ShowMessage(GetMemBytes(p, 10)); {沒有初始化}
  FreeMemory(p);
end;

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

另外: FillMemory、ZeroMemory 的操作對象是指針, 而 FillChar 的操作對象則是實體.

Tips
郴維網為您提供各類專業服務:
軟件開發,電腦配件銷售,WIFI路由器銷售,上門電腦維修,上門安裝系統,系統安裝,軟、硬件安裝,電腦除塵清灰,顯示器維修,WIFI安裝調試,服務器維護,數據恢復,密碼破解,網絡布線,網絡檢修,打印機維修,打印機加碳粉,蘋果電腦安裝系統,蘋果電腦安裝雙系統,監控安裝維護,電腦外包,筆記本電腦維修,餐飲、美容行業軟件安裝 等。。。。。。
點擊次數:306 更新時間:2021-12-12 15:08:12  【打印此頁
關鍵詞推薦:郴州電腦城 郴州電腦維修公司 維修電腦公司 郴州軟件開發 上門電腦維修 上門安裝系統 筆記本電腦維修 郴州打印機維修 打印機加碳粉 電腦安裝雙系統 蘋果電腦雙系統 液晶顯示器維修 聯想筆記本維修 聯想筆記本維修電話 戴爾筆記本維修電話 郴州戴爾筆記本維修 戴爾筆記本郴州維修點 華碩筆記本維修點 郴州華碩筆記本維修 郴州筆記本上網維修
免费A级毛片无码A∨免费软件