Sizof проблем
2 отговора
0 прегледа
Sizof проблем
Здравейте. Наложи ми се да прехвърля едно малко програмче, работещо под ДОС на Делфи. 6 ми е версията. Програмчето чете от некъв файл и смята нещоси. Файла е с определена структура... Та стигнах до там, че стана проблем с записа на файла... Наложи се да тествам sizeof и ми се случи следната случка:
1.Дефинирах 2 типа:
Tip1=record
a0:array[1..10] of byte;
a:Longint;
a1:array[1..10] of byte;
end;
Tip2=record
a:Longint;
a1:array[1..20] of byte;
end;
2.После 2 променливи:
Var1:Tip1;
Var2:Tip2;
3.Шашнах се като разбрах че:
Sizeof(Var1) е 28;
Sizeof(var2) е 24;
Явно на делфи 6 има значение къде точно в записа се намира променливата. А може ми версията с която съм е бъгната?
1.Дефинирах 2 типа:
Tip1=record
a0:array[1..10] of byte;
a:Longint;
a1:array[1..10] of byte;
end;
Tip2=record
a:Longint;
a1:array[1..20] of byte;
end;
2.После 2 променливи:
Var1:Tip1;
Var2:Tip2;
3.Шашнах се като разбрах че:
Sizeof(Var1) е 28;
Sizeof(var2) е 24;
Явно на делфи 6 има значение къде точно в записа се намира променливата. А може ми версията с която съм е бъгната?
packed record
Членовете на записа се подравняват на 32 бита за да се оптимизира достъпът до тях в паметта. Ако искаш да го изключиш това си декларирай записа като packed record:
Linux isn't free, it's worthless.
Tip1 = packed record
a0: array[1..10] of byte;
a: Longint;
a1: array[1..10] of byte;
end;
Linux isn't free, it's worthless.