普通情况下,这两个类型的大小是否一样?是多少?
type
TMy1 = record
A: Byte;
B: Word;
C: Integer;
end; TMy2 = record
A: Byte;
C: Int64;
B: Integer;
end;只允许心算,禁止上机调试
调试过的就别贴出答案,让别人想想
type
TMy1 = record
A: Byte;
B: Word;
C: Integer;
end; TMy2 = record
A: Byte;
C: Int64;
B: Integer;
end;只允许心算,禁止上机调试
调试过的就别贴出答案,让别人想想
解决方案 »
- stringgrid 鼠标滑轮事件失效
- DELPHI中有没有像C++链表一样的数据结构,可以方便实现删除
- 数据备份问题?高手指点~
- BYTE类型的数组如何转换成STRING类型
- 小弟新来!新手上路!请大家多多关照!
- FTP传输中下载数据缺失的问题
- 关于Report Builder 中 统计的问题
- 为什么执行 if mythread.suspended 结果错误?
- 在Delphi中如何实现两个对象之间的复制?
- 大家晚上好,可以交个朋友吗? qq:15405747
- 为何 Socket 发送流后,接收端接收的大小与发送的大小不一致(接收的数据总是大于发送的数据)?
- 一个sybase 下的sql 仍没人解决
A: Byte;
C: Integer;
B: Word;
end;这样写才让两个结构更模糊吧。计算的方法是:( (SizeOf(Field1) + SizeOf(Field2) + ...) + (LastFieldSizeOf - 1) ) and (not (LastFieldSizeOf - 1))
sizeof(TMy1) = 8
sizeof(TMy2) = 24在各种不同对齐方式下, 心算很容易算出
对齐字节数 sizeof(TMy1) sizeof(TMy2)
--------- ------------ ---------------
8 8 24
4 8 16
2 8 14
1 7 13
d6中文帮助 ://
记录类型
当一个记录类型在 {$A+} 状态下声明,并且声明中不包括保留字 packed 时,该记录类型是一个不压缩的记录类型(unpacked record type),并且记录中的字段将被调整,以提供更高效的CPU访问。调整被每个字段的类型控制。每个数据类型都有一个固定的调整尺寸,它被编译器自动计算。调整尺寸可以是1、2、4或8,以及表示字节边界(类型的值必须存储在此边界以提供最有效的访问)的值。下表列出了所有数据类型的调整尺寸:(略)为确保不压缩的记录类型其字段具有合适的调整尺寸,如果需要,编译器在调整值为2的字段之前插入1个不使用的字节,在调整值为4的字段之前增加3个不使用的字节。最后,编译器对记录的总尺寸向上增加到字节边界,该边界由所有字段的最大调整尺寸指定。当一个记录类型在 {$A-} 状态下声明,或者声明中包括了保留字 packed 时,记录中的字段不被调整,而替换为赋予连续的偏移量。这样一个压缩记录的总尺寸就是所有字段的尺寸的和。因为数据调整尺寸可能改变(如不同版本的编译器对同一种数据类型的调整值可能不同),所以最好还是压缩所有的记录,例如,想要把记录写入磁盘时,或者在内存中传递到另一模块而该模块由不同版本的编译器编译时。