对于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
本文深入探讨了Delphi中string类型的内部结构及其传递机制。解释了const修饰符如何优化string参数的内存使用,并详细说明了string变量的实际内容存储方式。
265

被折叠的 条评论
为什么被折叠?



