Delphi中String引用计数长度与占用内存

Posted 码农的笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中String引用计数长度与占用内存相关的知识,希望对你有一定的参考价值。

----------D7下

--String和Shortstring不一样!!!

vstr:string;

vShort:Shortstring;

vstr[0]这样写错误!;//vstr[1]才是第一个字符

vShort[0]这样写没问题!//vShort[0]保存的是vShort的长度:byte(vShort[0]);

 

-------------先说String------

var
vStr:string;

procedure TForm1.Button2Click(Sender: TObject);
begin
vStr:=\'555\';//vStr不能放在这个procedure中声明,否则,下面的不准确,为啥不准确,俺也说不出所以然,vStr这个不要定义为局部变量;说了两遍了
Memo1.Clear;
Memo1.Lines.Add(\'地址:\'+IntToStr(Integer(vStr)));
Memo1.Lines.Add(\'长度:\'+IntToStr(pinteger(Integer(vStr)-4)^));
Memo1.Lines.Add(\'引用次数:\'+IntToStr(pinteger(Integer(vStr)-8)^));
Memo1.Lines.Add(\'占用字节数:\'+IntToStr(pinteger(Integer(vStr)-12)^));
end;

----------------------------String结束

 

------------------ShortString开始---------

资料参考:更深入的理解delphi7里的ShortString类型_honglei520的博客-CSDN博客  https://blog.csdn.net/honglei520/article/details/44588125

ShortString 是一种比较古老的 Pascal 字符串格式,它最多只能容纳  255  个字节的字符。当我们声明一个 ShortString 类型的变量时,Delphi 会自动申请  256  个字节的内存空间给该变量,其中第一个字节用来存放字符串的长度,后面的  255  个字节用来存放字符串内容,如果字符串的长度不够  255  个字节,则有多少字符就用多少内存,后面未用到的内存清零。  
————————————————
版权声明:本文为CSDN博主「honglei520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/honglei520/article/details/44588125

procedure TForm1.Button3Click(Sender: TObject);
var
vShort:ShortString;
begin
vshort:=\'空间和科技\';
ShowMessage(\'vShort的长度:\'+IntToStr(byte(vShort[0])));
end;

 

---------------------ShortString结束----------------------

 

以上是关于Delphi中String引用计数长度与占用内存的主要内容,如果未能解决你的问题,请参考以下文章

引用计数机制的优点,缺点:

string类的写时拷贝与引用计数

string类的写时拷贝与引用计数

自动引用计数

垃圾收集与内存分配

垃圾收集与内存分配