关于字符串在内存中如何分配空间的问题:据我有限的知识, 以为在内存中分配变量的空间, 是指定长度的. 然而, 字符串的长度通常是不固定的.
例如: 在程序中定义一个strName字符串变量, 先赋值为 strName := 'A', 然后改变它的值, strName := 'BBB', 那么, strName 变量在内存中的长度是如何控制的呢? 2次赋值后, strName 的内存地址没有改变.

解决方案 »

  1.   

    短字符串和长字符串是不一样的,在delphi里string类型是当作指针来操作的。
      

  2.   

    对于长字符串来说
    首先在应用程序内存区或栈分配4字节的空间,存放地址,指向内存堆中实际存放长字符串内容的空间,然后在堆中分配内存。
    长字符串类型在堆中的内存占用为:4字节的引用计数+4字节的串长+Length(str)字符串+1字节(#0),至于前面8字节的引用计数和串长的用途,楼主要参考相关书籍了《Delphi源代码分析》里有相关介绍 ^_^短字符串情况简单的多
    str1: String[20];  //由于内存堆栈以4字节为单位进行分配,所以str1占用24字节空间。
    str2: ShortString; //由于str2的声明使用默认值,所以str2占用256字节空间。