Sizof проблем

2 отговора 0 прегледа
#1

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 има значение къде точно в записа се намира променливата. А може ми версията с която съм е бъгната?

Отговор
в отговор на Heykия #2

packed record

Членовете на записа се подравняват на 32 бита за да се оптимизира достъпът до тях в паметта. Ако искаш да го изключиш това си декларирай записа като packed record:

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.


Отговор
в отговор на andrew_nikoloff #3

Re: packed record

Голем да пораснеш , батювата!

Отговор