Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Внизперевод структуры с с++ в делфи Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.01 c