Delphi的用户定义类型中(类似于C中的struct)存不存在边界对齐的问题(如果存在,怎样调整为紧凑模式:C的编译选项/Zp1)、能不能支持动态数组成员(如果支持,在运行时设定其大小后,该用户定义类型是否存储于连续的内存地址:即是否可以通过指向该用户定义类型的指针一次性引用所有数据成员)、Delphi中日期时间的控制范围有多大?在相同算法和运行环境的情况下,Delphi代码比C代码的执行速度慢多少?

解决方案 »

  1.   

    可以看一下  Delphi5 开发人员指南 里边有好多是针对由 C转到 DELPHI 的程序员的问题!
      

  2.   

    Delphi的用户定义类型中(类似于C中的struct)存不存在边界对齐的问题(如果存在,怎样调整为紧凑模式:C的编译选项/Zp1)、
    //C里可以通过 #pragma pack(1)来控制对齐~~
    //delphi可以通过packed来压缩 
      //type TRecord = packed record X: Integer; Y: Integer; end;
      //另外也可以在编译环境中设置 (Project Option->Compiler)
    能不能支持动态数组成员(如果支持,在运行时设定其大小后,该用户定义类型是否存储于连续的内存地址:即是否可以通过指向该用户定义类型的指针一次性引用所有数据成员)、
    //A: array of Char; 这就是的,相当于PChar,是连续的存储 
      //参考SelLength()、Low()、High()等相关函数~~Delphi中日期时间的控制范围有多大?
    //Low(TDateTime)..High(TDateTime)在相同算法和运行环境的情况下,Delphi代码比C代码的执行速度慢多少?
    //Delphi编译器会做优化很多工作
    //不同的算法有不同的结果,自己做做测试不就知道了~~
      

  3.   

    Delphi代码+最佳的编程思路=最快的速度!
      

  4.   

    我的动态数组也是用户定义类型,不是简单类型:如例1:
    struct FirstStruct
    {
        int i;
        long l;
        float f;
        struct SecondStruct
        {
            int i2;
            long l2;
            float f2;
        } MyDynaArray[];
    };
    例2:
    struct Struct
    {
        int i;
        long l;
        float f;
        union Union
        {
            int i2;
            long l2;
            float f2[];
        } MyDynaArray2[];
    };
    type
      SecondStruct = packed record
        i2: Integer;
        l2: Longint;
        f2: Single;
      end;
      FirstStruct = packed record
        i: Integer;
        l: Longint;
        f: Single;
        MyDynaArray: array of SecondStruct;
      end;  Union = packed record
        case Integer of
          0: (i2: Integer);
          1: (l2: Longint);
          2: (f2: Single);
      end;
      Struct = packed record
        i: Integer;
        l: Longint;
        f: Single;
        MyDynaArray2: array of Union;
      end;