fillmemory、zeromemory 一目了然的兩個函式, 但其實它們都是呼叫了 fillchar;
清空不過就是填充空字元(#0: 編號為 0 的字元), 說來說去是一回事.
為了下面的測試, 先寫乙個以十六進製制方式檢視記憶體的函式:
functiongetmembytes(varx; size: integer):string;var
pb: pbyte;
i: integer;
begin
pb := pbyte(x);
fori := 0
tosize - 1
do
begin
result := result + inttohex(pb^, 2
) + #32
;
inc(pb);
end;
end;
//測試:
var
p1: pansichar;
p2: pwidechar;
s1: ansistring;
s2: unicodestring;
begin
p1 := 'abcd'
;
p2 := 'abcd'
;
s1 := 'abcd'
;
s2 := 'abcd'
;
showmessage(getmembytes(p1,4
));
showmessage(getmembytes(p2,8
));
showmessage(getmembytes(s1,4
));
showmessage(getmembytes(s2,8
));
end;
測試 fillmemory、zeromemory、fillchar 三個填充函式:
constnum = 10
;
var
p: pchar;
begin
p := stralloc(num);
showmessage(getmembytes(p, num));
fillmemory(p, num, byte('a'
));
showmessage(getmembytes(p, num));
zeromemory(p, num);
showmessage(getmembytes(p, num));
fillchar(p^, num, 'b'
);
showmessage(getmembytes(p, num));
strdispose(p);
end;
此時, 我想到乙個問題:
getmem 和 getmemory 沒有初始化記憶體; allocmem 會初始化記憶體為空, 那麼
reallocmem、reallocmemory 會不會初始化記憶體?
測試一下(結果是沒有初始化):
var
p: pointer;
begin
p := getmemory(3
);
showmessage(getmembytes(p, 3
));
reallocmem(p, 10
);
showmessage(getmembytes(p, 10
));
freememory(p);
end;
var
p: pointer;
begin
p := allocmem(3
);
showmessage(getmembytes(p, 3
));
reallocmem(p, 10
);
showmessage(getmembytes(p, 10
));
freememory(p);
end;
另外: fillmemory、zeromemory 的操作物件是指標, 而 fillchar 的操作物件則是實體.
批處理填充手機記憶體,ROM填充,記憶體填充小工具
adb shell dd填充記憶體用法 echo off adb wait for device echo 當前手機可用記憶體如下 adb shell df h data media set p name 輸入檔名稱 注意 名稱重複會覆蓋原檔案 set p count 輸入需要填充的檔案大小 單位為...
堆積木 vector 清空記憶體
蒜頭君有 n 塊積木,編號分別為 1 到 n。一開始,蒜頭把第 i 塊積木放在位置 i。蒜頭君進行 m 次操作,每次操作,蒜頭把位置 b 上的積木整體移動到位置 a 上面。比如 1 位置的積木是 1,2 位置的積木是 2,那麼把位置 2 的積木移動到位置 1 後,位置 1 上的積木從下到上依次為 1...
vector清空 ,防止記憶體洩露
注 使用過第三種方法,可行!vector vecint for int i 0 i 500 i int j vecint.capacity j 512 i vecint.size i 500 第一種辦法使用 clear 清空元素,但不 空間 vecint.clear j vecint.capacit...