动态数组 分配的问题 大家来讨论
delphi吧
全部回复
仅看楼主
level 10
5xHs 楼主
procedure TForm1.Button1Click(Sender: TObject);
type
data = array of Integer;
var
parrdata: data;
index: Integer;
base, base1: Integer;
begin
SetLength(parrdata, 1);
parrdata[0]:= 33;
n:= parrdata[0];
base:= Integer(@parrdata);
index:= Length(parrdata);
SetLength(parrdata, index + 1); // 这里 难道 内存 不重新分配吗 怎么理解
parrdata[1]:= 55;
base1:= Integer(@parrdata);
if base <> base1 then ShowMessage('no');
ShowMessage(IntToStr(parrdata[0])+
#13#
10+inttostr(parrdata[1]));
end;
2017年04月06日 09点04分 1
吧务
level 14
小块内存也许分配了不止4字节
2017年04月06日 09点04分 2
我感觉应该是分配256个内存吧
2017年04月06日 12点04分
@5xHs 可以测试一下
2017年04月06日 12点04分
@BambooCaep 这个 怎么测试 ?
2017年04月06日 12点04分
@5xHs 加大长度直到地址变化
2017年04月06日 13点04分
level 12
内存是会重新分配的,你的parrdata这个变量它自身的地址是不会变化的。
2017年04月07日 03点04分 3
level 11
如果我没记错,Delphi的动态内存分配是按照2的次方来的,从4倍开始,不够了再八倍,还不够了再十六倍这样。
2017年04月07日 05点04分 4
level 9
windows的内存分页机制一次是分配4096个字节,你一次只用了1字节,没必要给你多分配一个页,只会在那个页的基础上给你多划1字节。
2017年04月09日 01点04分 5
1