对于string类型
const
按地址传递,而不是像默认方式那样只是增加引用计数
默认
只是增加引用计数,被修改后才产生本地副本(copy-on-write)
比如
procedure Method1(S: string);
begin
S := S + 'k';
end;
只有在S被修改后副本才会产生,S的地址才会变化
var
按地址传递参数, 同const
结论:
const修饰符会(也只会)优化string和记录类型的参数传递时的内存占用, 对于其它类型,默认方式和const方式都会产生本地副本
string结构:
string变量实际上是其内容的第一个字符的地址,在此地址之前的 12 字节内存中的内容才是字符串内部结构中的头部,分别是 32 位字符串占用的内容空间大小,32 位引用计数,32 位字符串长度
from
http://rainux.org/delphi