记录数据如下: TRSOCK = record
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;
RCO,RP,RC,RL,RH,RFD:integer;
end;按记录长度计算应该是31字节!但实际上SIZEOF却是32字节!我调试的时候发现
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte; //7字节
和
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6,TMP7:byte; //8字节
所占的字节数是相同的!
怎么才能让
TRSOCK = record
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;
RCO,RP,RC,RL,RH,RFD:integer;
end;读出31字节呢?
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;
RCO,RP,RC,RL,RH,RFD:integer;
end;按记录长度计算应该是31字节!但实际上SIZEOF却是32字节!我调试的时候发现
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte; //7字节
和
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6,TMP7:byte; //8字节
所占的字节数是相同的!
怎么才能让
TRSOCK = record
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;
RCO,RP,RC,RL,RH,RFD:integer;
end;读出31字节呢?
0000 0000 0000你用size of 测的结果是
0000 0000 0000 0000
0000 0000 0000 0000
我想size of 测时是有最小单位的,没用完的也算,这跟c 是一样的
也就是说一般情况下,编译器会进行数据对齐,使每个字段按4字节对齐。
因为我们知道CPU传递给Cache的内存地址总是可以被4整除的,32位CPU嘛,32位就是4个字节。
所以Delphi默认的这种方式优化了数据的读取速度,但浪费了一些空间。
如果你很在乎这些小空间,那就在声明的时候加个关键字,这样SizeOf就是你想要的值了:
TRSOCK = packed record
…………
end;