普通情况下,这两个类型的大小是否一样?是多少?
type
  TMy1 = record
    A: Byte;
    B: Word;
    C: Integer;
  end;  TMy2 = record
    A: Byte;
    C: Int64;
    B: Integer;
  end;只允许心算,禁止上机调试
调试过的就别贴出答案,让别人想想

解决方案 »

  1.   

    TMy2应该写成:  TMy2 = record
        A: Byte;
        C: Integer;
        B: Word;
      end;这样写才让两个结构更模糊吧。计算的方法是:( (SizeOf(Field1) + SizeOf(Field2) + ...) + (LastFieldSizeOf - 1) )  and (not (LastFieldSizeOf - 1))
      

  2.   

    这主要考虑字节对齐, 如果是8字节对齐, 
    sizeof(TMy1) = 8
    sizeof(TMy2) = 24在各种不同对齐方式下, 心算很容易算出
    对齐字节数   sizeof(TMy1)    sizeof(TMy2)
    ---------    ------------    ---------------
    8            8               24
    4            8               16
    2            8               14
    1            7               13
      

  3.   

    偶算不出来~~~~看来偶太依赖于IDE的调试了,平时都不注意这些基本功~~~汗~~~
      

  4.   


    d6中文帮助 ://
    记录类型
    当一个记录类型在 {$A+} 状态下声明,并且声明中不包括保留字 packed 时,该记录类型是一个不压缩的记录类型(unpacked record type),并且记录中的字段将被调整,以提供更高效的CPU访问。调整被每个字段的类型控制。每个数据类型都有一个固定的调整尺寸,它被编译器自动计算。调整尺寸可以是1、2、4或8,以及表示字节边界(类型的值必须存储在此边界以提供最有效的访问)的值。下表列出了所有数据类型的调整尺寸:(略)为确保不压缩的记录类型其字段具有合适的调整尺寸,如果需要,编译器在调整值为2的字段之前插入1个不使用的字节,在调整值为4的字段之前增加3个不使用的字节。最后,编译器对记录的总尺寸向上增加到字节边界,该边界由所有字段的最大调整尺寸指定。当一个记录类型在 {$A-} 状态下声明,或者声明中包括了保留字 packed 时,记录中的字段不被调整,而替换为赋予连续的偏移量。这样一个压缩记录的总尺寸就是所有字段的尺寸的和。因为数据调整尺寸可能改变(如不同版本的编译器对同一种数据类型的调整值可能不同),所以最好还是压缩所有的记录,例如,想要把记录写入磁盘时,或者在内存中传递到另一模块而该模块由不同版本的编译器编译时。