Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Почему размер пустой структуры = 1 byte


Автор: GSasha 10.4.2008, 17:20
интересно, что занимает 1 байт в совсем пустой структуре:

Код

#pragma pack(1)
struct test
{
};
#pragma pack()


Код

cout <<  sizeof test; // size of test = 1 ??? что это за байт? 


тем более, добавляя один WORD в даную структуру - sizeof выдает реальный размер WORDa, а не sizeof WORD + 1;

Автор: Alek86 10.4.2008, 17:43
помнится, где-то было написано, что для работы с массивами:

то есть для вычисления количества элементов в массиве используется алгоритм
Код

A mas[2];
int count = sizeof(mas) / sizeof(A)

для всех типов он одинаков, а для "нулевого" класса он был бы неприменим

это не единственная причина, но других я не помню

Автор: Daevaorn 10.4.2008, 17:50
Цитата(GSasha @  10.4.2008,  18:20 Найти цитируемый пост)
интересно, что занимает 1 байт в совсем пустой структуре:

Ничего не занимает. У двух инстансов структуры должны быть разные адреса, например, для работы с ними массивов.

Автор: GSasha 10.4.2008, 17:57
Понятно, значит это защита компилятора от самого себя

Автор: archimed7592 10.4.2008, 18:53
Цитата(GSasha @  10.4.2008,  17:57 Найти цитируемый пост)
Понятно, значит это защита компилятора от самого себя 

Это требование Стандарта.

Добавлено через 6 минут и 18 секунд
http://www.kuzbass.ru:8086/docs/isocpp/intro.html#intro.object
Цитата
-5- Unless it is a bit-field (class.bit), a most derived object shall have a non-zero size and shall occupy one or more bytes of storage.

Автор: GSasha 10.4.2008, 20:39
Спасибо, теперь все ясно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)