Object Pascal中String类型的内幕探讨[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 weizhisheng 的 blog

 

object pascal中,string(准确的说是ansistring)是一种可变长度的字符串,通过pchar(astring)可以将其转换为与windows api相兼容的字符指针类型。事实上,string类型就是一个指针,你可以用sizeof去读取它的大小,不论字符串的实际长度是多少,sizeof(astring)永远是4。string与一般的null-terminated字符指针不同的是,string还要保留另外的一部分空间,用于记录字符串长度和引用计数等信息。string类型在内存中的确切格式如下:

 

4字节)分配大小+(4字节)引用计数+(4字节)字串长度+(不定长)字符数组+(1字节)$0结束字符

 

为了验证这一点,我们可以在程序中添加一个作用域为private的string变量,在程序中动态改变它的长度和内容,同时观察它的分配大小和长度发生了什么变化。另外,为了观察引用计数的变化,只有在两个字符串互相复制的时候才能体现出来,我们在程序中也要实现这一点。

 

请新建一个application,在窗体上放置一个edit,一个listbox和三个button。其中,edit用来改变字符串的内容;listbox用来记录跟踪信息;三个按钮分别用于观察字符串的当前状况,观察字符串的引用计数变化情况和清空列表内容。

 

form的声明中添加一个变量:

type

  tform1=class(tform)

   ...

   private

s : string;

end;

 

添加三个按钮的事件处理如下:

procedure tform1.button1click(sender: tobject);

var

  psz : pchar;

  pdw : pdword;

  dw1, dw2, dw3 : dword;

begin

本文关键:Delphi,Object Pascal
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top