var s1,s:String//内存中自动建立一个指向长字符串的间接访问指针该指针的初始值是nil. begin s:='MyString';//delphi分为s分配足够的内存使s指向新字符串并试着释放它原来使用的内存。 s1:=s;//delphi不用复制字符串s的内容,只是增加引用计数并改变第二个字符串变量s1,分配给它与第一个字符串相同的内存地址。这样,在内存中只是存放了一份字符串由两个变量使用。 s:='String';//delphi会将s复制到新的内存地址因为改变只能影响一个字符串。这就是copy on write。 当引用同一长字符串的所有变量都不在相同的作用域时,引用计数器自动归零,而且delphi会自动释放所占内存. end; setlength:可以强制delphi为长字符串分配一段指定大小的内存。 30分可以给我吧:)如果再加分我再说下去!
其帮助中有图例。
length不是用来取字符串长度的吗?
字符串的地址往前4个字节是字符串的长度,//length是取这里的呢
在往前4个字节是字符串申请的容量 //还是这里的?
begin
s:='MyString';//delphi分为s分配足够的内存使s指向新字符串并试着释放它原来使用的内存。
s1:=s;//delphi不用复制字符串s的内容,只是增加引用计数并改变第二个字符串变量s1,分配给它与第一个字符串相同的内存地址。这样,在内存中只是存放了一份字符串由两个变量使用。
s:='String';//delphi会将s复制到新的内存地址因为改变只能影响一个字符串。这就是copy on write。
当引用同一长字符串的所有变量都不在相同的作用域时,引用计数器自动归零,而且delphi会自动释放所占内存.
end;
setlength:可以强制delphi为长字符串分配一段指定大小的内存。
30分可以给我吧:)如果再加分我再说下去!