2013-05-27 3 views
2

У меня есть следующая структура определяется:Как определить размер всей структуры в C?

typedef struct 
{ 
    int a; 
} A; 

typedef struct 
{ 
    int b; 
} B; 

typedef struct 
{ 
    A a, 
    B b[10]; 
} C; 

в то время как sizeof(C) будет sizeof(A) + sizeof(B) * 10? Я хочу иметь весь размер структуры C, как ее получить?

+6

sizeof (C) - что вы пробовали и как оно провалилось? –

+0

Я не знаю, как этот sizeof будет выполнять такую ​​структуру, как – user2131316

+2

@ user2131316: 'sizeof' просто запрограммирован так, чтобы сделать это правильно. Вы можете положиться на это. –

ответ

2

sizeof(C) будет по крайней мере sizeof(A) + sizeof(B) * 10

Агрегатные типы могут быть больше из-за проблем с выравниванием. Наверное, не в этом случае, учитывая, что мы действительно говорим о 11 ints.

+0

Может ли это быть меньше для других агрегированных типов? Так может ли часть второго члена быть помещена в концевое дополнение первого? –

+0

@ JohannesSchaub-litb: легко видеть, что это не разрешено для типов, которые вы можете копировать/восстанавливать с помощью 'memcpy' (так как восстановление значения первого члена будет сжимать значение второго). Менее очевидно, запрещает ли стандарт для нетривиальных типов, я не знаю ответа, но я подозреваю, что это запрещено. –

+0

Я имею в виду в C. Разрешено в C++ определенно для нетривиальных классов (и gcc делает это). –

1

Как комментарии показывают, просто использовать SizeOf на примере C:

C c; 
sizeof(c); 
+1

Вам не нужен экземпляр, 'sizeof (C)' будет делать трюк. – interjay

+0

@interjay Да, спасибо - я делал предположения о потребностях OP. –