On 03.03.2013 14:26, Xiangrong Fang wrote:
A (Ansi)string in {$H+} mode is just a pointer (to the characters of the
string). So sizeof(DataFolder)=4 (or 8) in all cases. There is no room
for the string unless
I guess this is the cause, but then there is no need to specify "packed"
if I just use array of char.
The "packed" should always be used if you want to read/write data. Only
then you can be sure that the memory layout of the record is correct.
Otherwise padding bytes will be added. Consider the following record:
=== example begin ===
type
TMyRecord = record
b: Byte;
i: LongInt;
w: Word;
end;
=== example end ===
The size of this record will be 12, because between b and i and after w
padding bytes are added. While if you add "packed" the size will be 7
and the fields will directly follow after each other.
The memory layout of non-packed records is not guaranteed to stay the
same between FPC versions! It could be for example that we find a bug in
the code that generates the memory layout of a record and then suddenly
you can no longer read in files that were written by a version of your
program compiled with the older compiler. For "packed" there is the
guarantee though that the layout will stay the same.
Regards,
Sven
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus