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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.