LINUX.ORG.RU

Выравнивание структур в Си


0

0
Вот столкнулся с такой проблемой: Есть структура со следующими полями char Some0[18]; off_t Some1; off_t Some2; off_t Some3;

sizeof(off_t) выдаёт 8 - всё верно sizeof(char) выдаёт 1 а sizeof(структуры) выдаёт 44 ((( Как я понимаю это выравнивание - но сколько я не бился с ключами и установкой принудительного выравнивания - не хочет ((((

В чём здесь проблема и как это исправить?

anonymous
А чего ты хочешь-то? И кстати почему бы тебе off_t в начало не поместить? (сорри если чушь сморозил, просто первое что пришло в голову).
Teak ★★★★★
()
#include <stdio.h>

struct off_t {
        char a[8];
};

struct __attribute__((packed)) compound {
        char ch;
        struct off_t e1;
        struct off_t e2;
        struct off_t e3;
} b;

main()
{
        printf("%d %d\n", sizeof(struct off_t), sizeof(b));
        return 0;
}

$ ./test 
8 25
zeqfreed
()
> В чём здесь проблема и как это исправить?

а что ты исправить то хочешь? в чем задача/проблема?

dilmah ★★★★★
()
#pragma pack не помогает?
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.