Поведение вывода при определении битового поля в C - PullRequest
1 голос
/ 26 ноября 2011
#include <stdio.h>

int main()
{
    struct value
    {
        int bit1:1;
        int bit2:4;
        int bit3:4;
    } bit;

    printf ("%d\n", sizeof(bit));
    return 0;
}

Вывод на Tc / Tc ++:

2

Вывод под Linux:

4

Я знаю, что мне не хватает некоторой концепции битовых полей.

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

sizeof для структуры не совпадает с суммой размеров всех элементов - это особенно верно для битовых полей.

Как правило, структура должна быть дополнена до определенногоРазмер и выравнивание.(По-видимому, 2 в Tc / Tc ++ и 4 в Linux.)

Таким образом, хотя используется только 9 битов, оно дополняется до размера слова.

РЕДАКТИРОВАТЬ:

Обратите внимание, что стандарт C не определяет, сколько выполнено заполнения.И поэтому вы получаете разные результаты от двух разных компиляторов.

1 голос
/ 26 ноября 2011

Ваш размер структуры округляется до машинного слова.Подумайте об этом - как еще это может быть сохранено (и адресовано) в памяти или в регистре?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...