Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.03;
Скачать: CL | DM;

Вниз

перевод структуры с с++ в делфи   Найти похожие ветки 

 
Anatol   (2003-10-22 19:26) [0]

В с++ имеем

struct struct1 {
unsigned long field1;
unsigned long field2;
unsigned long field3;
unsigned long field4;
}struct1;

struct struct2{
unsigned char field1[16];
unsigned char field2[9];
unsigned char field3[13];
unsigned char field4;
unsigned char field5;
unsigned char field6;
unsigned char field7[41];
}struct2;

struct struct3 {
struct struct1 struct1;
struct struct2 struct2;
} struct3;

sizeof(struct1) = 16
sizeof(struct2) = 82
sizeof(struct3) = 100

при обьявлении сответсвующих структур в делфи
TStruct1 = packed record
field1: Cardinal;
field2: Cardinal;
field3: Cardinal;
field4: Cardinal;
end;

TStruct2 = packed record
field1: array[1..16] of Byte;
field2: array[1..9] of Byte;
field3: array[1..13] of Byte;
field4: Byte;
field5: Byte;
field6: Byte;
field7: array[1..41] of Byte;
end;

TStruct3 = packed record
struct1: TStruct1;
struct2: TStruct2;
end;

var
Struct3: TStruct3;

получаем
SizeOf(Struct3.struct1) = 16
SizeOf(Struct3.struct2) = 82
SizeOf(Struct3) = 98

почему SizeOf(Struct3) в с++ больше на 2 байта???


 
Игорь Шевченко ©   (2003-10-22 19:31) [1]

Какая опция выравнивания стоит при компиляции С-шных структур ?
(Судя по результату, не один байт)


 
Anatol   (2003-10-22 19:43) [2]

я плохо знаю MS c++ но в опциях проекта Project Settings\c++\Optimizations стоит Disable(Debug).
Наверно в другом месте ставится потому что убрал в делфи packed и тоже получаем 100.

Спасибо, я почемуто был уверен что в с++ структуры должны занимать ровно столько сколько в суме имеют ее члены.


 
Игорь Шевченко ©   (2003-10-22 21:33) [3]

Anatol (22.10.03 19:43)

Нет, зависит от опций компилятора, от одного до 8 байт.



Страницы: 1 вся ветка

Текущий архив: 2003.11.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
6-8578
pec2
2003-09-07 21:09
2003.11.03
почта


14-8623
Думкин
2003-10-13 05:29
2003.11.03
С днем рождения! 13 октября.


1-8409
Михаил
2003-10-22 14:46
2003.11.03
Остановка сервиса WinNT при попытке открыть TpFibDataSet.


9-8241
Polymorphic
2003-04-30 16:36
2003.11.03
AccessViolation при уничтожении интерфейсов


1-8351
Master
2003-10-23 01:16
2003.11.03
Помогите стиль bsnone как ее можна перетакивать???????