размер структуры C - PullRequest
       3

размер структуры C

1 голос
/ 18 августа 2011
struct st1{
    int a:1; int b:3; int c:6; int d:3;
}s1;

struct st2{
    char a:3;
}s2;

int main(){
    printf("%d : %d",sizeof(s1),sizeof(s2));
    getchar();
}    

Я получаю вывод как 2: 1

Подскажите, пожалуйста, как работает эта программа и для чего здесь используется оператор: a (1).

Спасибо

Ответы [ 3 ]

4 голосов
/ 18 августа 2011

: определяет битовое поле .

В вашем примере объекты типа struct st1 используют 13 битов в некотором порядке, выбранном компилятором.

Конкретное расположение, выбранное при компиляции кода, создало объект, занимающий 2 байта.13 битов не обязательно являются первым (или последним) в этих байтах.

Другой тип структуры (struct st2) занимает (3 бита из) 1 байт.

1 голос
/ 18 августа 2011

Используемый там оператор : указывает размеры в битах содержащихся в них полей. sizeof() возвращает длину границы байта, поэтому для первого 13 бит (2 байта) и для второго 1 байт.

0 голосов
/ 18 августа 2011

Здесь стоит отметить как минимум две вещи:

  1. Каждый объект должен быть адресуемым, что означает, что он будет по крайней мере занимать размер одного символа.
  2. Реализация может свободно добавлять отступы для выравнивания или других вопросов по своему усмотрению. Iow, структура, содержащая два целых, не гарантируется равной по размеру sizeof (int) * 2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...