Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.45 MB
Время: 0.009 c
1-8534
Инна
2003-10-23 10:56
2003.11.03
Ещё раз о создании компонента


14-8651
Soft
2003-10-14 04:01
2003.11.03
Тайна Альберта Эйнштейна


1-8390
Aleksandr
2003-10-22 17:56
2003.11.03
Можно ли как-то при помощи директив компилятора изменить exename?


1-8497
killer
2003-10-23 20:55
2003.11.03
Как программноузнать русифированная или нерусифированная Windows?


3-8269
vidiv
2003-10-14 06:00
2003.11.03
Решение задач по FoxPro





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский