Полное раскрытие - это домашняя работа, хотя она завершена и полностью работает, я ищу лучшее решение.
У меня есть двоичный файл, который был создан программой, скомпилированной в Visual Studio (я полагаю). Структура выглядит примерно так.
struct Record {
char c;
double d;
time_t t;
};
Размер этой структуры в Windows с Visual Studio 2008 дает 24 байта. 1 + 8 + 8 = 24
. Так что там происходит некоторое дополнение. Одна и та же структура в Linux и gcc дает 16 байтов. 1 + 8 + 4 = 16
. Чтобы выстроить это в ряд, я добавил некоторые отступы и изменил time_t
на другой тип. Итак, моя структура выглядит следующим образом.
struct Record {
char c;
char __padding[7];
double d;
long long t;
};
Теперь это работает, и gcc дает свой размер в 24 байта, но кажется немного грязным. Итак, два вопроса ..
Почему это реализовано по-разному между двумя компиляторами?
Есть ли варианты типа __attribute__ ((aligned))
или какие-либо другие более чистые решения для этого?