补充一下,刚才出了点问题,没法继续编辑了,下面的接上:或许delphi会有什么高招在释放S这个指针时捎带把它所指向的那一块内存也释放了,是这样,

解决方案 »

  1.   

    Delphi的String类型可以自动回收内存,其原理和DLL差不多。其实你说的不完全对,String类型索引0市其引用计数,当为0时,Delphi会自动这片内存,不用你操心。索引-1(整数)才是其长度。
      

  2.   

    当引用计数为0时,Delphi会自动释放这片内存
      

  3.   

    既然索引0是其引用值,而索引-1又另有所用,那么是不是对一个String的引用次数不能大于255呢?还有,String允许的最大尺寸大于256,所以长度应该是索引-4开始才对,应该是-4,-3,-2,-1,这四个字节来表示string的长度。
    我的疑惑是,如果Dispose,那么Dispose居然需要检查所指向的数据块中是否包含string类型,如果包含,再作额外的处理,这样的Dispose是不是太复杂了,开销太大了些?
    那个String=^TStringHead的数据结构只是我的一个猜测而已,而且只是为了说明不能充分释放内存的原因,见笑了。我再看看delphi的源代码,看看有没有dispose的详细过程。
    送上5分,如果不够还可以加。谢谢参与讨论。